草庐IT

c++ - 如何在混合语言应用程序中创建堆?

我们有一个用VisualBasic6.0编写的前端,它调用几个用混合C/C++编写的后端DLL。问题是每个DLL似乎都有自己的堆,但其中一个堆不够大。当我们分配了足够的内存时,堆就会与程序堆栈发生冲突。每个DLL都完全用C编写,除了基本的DLL包装器是用C++编写的。每个DLL都有一些入口点。每个入口点立即调用一个C例程。我们想增加DLL中堆的大小,但一直无法弄清楚该怎么做。我搜索了指导并找到了这些MSDN文章:http://msdn.microsoft.com/en-us/library/hh405351(v=VS.85).aspx这些文章很有趣,但提供的信息相互矛盾。在我们的问题中

windows - 从多个目录加载 Win32 模块

我有一个程序将插件存储在多个目录中,如下所示:root/core/bin/app.execore.dllplugin.dllsupport.dlla/bin/a.dlla_support.dll在此示例中,a.dll导入了core.dll、support.dll和a_support.dll(它们在导入表中的顺序)。a_support.dll导入support.dll。我可以更改除支持模块之外的所有模块,这些模块是第三方库的重新发布。我的代码调用LoadLibraryEx(name,NULL,LOAD_WITH_ALTERED_SEARCH_PATH)来加载每个插件。对于core.dll

.net - 从 .NET Windows 服务调用 native DLL 失败

我有一个nativedll形式的第3方API,我使用DllImport从C#调用它。此nativedll取决于打开的第3方应用程序。当我正常运行代码时,API会执行预期的操作并驱动应用程序。但是,当我运行与Windows服务相同的代码时,即使是我自己,API也会返回我在关闭应用程序时看到的相同(未记录的)错误代码;ProcessExplorer确认nativedll已从应用程序目录正确加载。可能是什么原因造成的,我该如何解决这个问题? 最佳答案 有点旧,但它是搜索中排名靠前的结果之一。所以我认为我的数据仍然有用。Ihavea3rdp

windows - 运行非线程安全 Dll 的多个 'instances'?

我有一个dll的源代码还不是线程安全的。dll相当复杂,需要相当长的时间才能使其线程安全。所以我想出了独立运行Dll的几个“副本”的想法。最简单的方法可能是创建N个重命名的Dll副本并为每个线程加载一个单独的Dll。这是可行的解决方案吗?有没有更好的类似方法?是否可能存在一些包装代码?我知道这根本不是一个好的工程解决方案。请不要怪我。但它可能会解决许多问题。编辑2017我已经做到了,而且没有任何问题。伟大的!但请注意以下几点:http://msdn.microsoft.com/en-us/library/2s9wt68x%28v=vs.80%29.aspx如果DLL将任何非本地数据或对

windows - 是否可以将 DLL 加载到地址空间而不是从文件系统文件加载?

我必须创建一个包装器DLL来导出一些符号(函数)。在其资源中,它包含另一个实际执行此任务的加密DLL。在包装器DLL初始化时,它解密原始的DLL,将其保存在文件中,并通过LoadLibrary加载到地址空间。但是我想避免将此DLL保存在文件中。我知道这并不能保证防弹保护,实际上可以转储进程虚拟内存并在那里看到它。我还知道可以创建一个具有FILE_FLAG_DELETE_ON_CLOSE属性的文件,这确保该文件在进程终止后立即被删除。但我仍然想知道是否有一个选项可以“不从文件”加载DLL。到目前为止,我想到了以下几点:分配一个具有足够保护的虚拟内存块(PAGE_EXECUTE_READ或

windows - 您可以将 OCaml 项目本地编译为 Windows 库吗?

我是OCaml的新手(但我过去使用过SML),我想知道两件事:1-OCaml程序是否可以编译为库?2-如果是这样,是否可以将它们编译为nativeWindowsdll。我想做的是使用LLVM在OCaml中创建一个编译器库,并在另一个Windows程序中使用它。PS:我知道我可以从C++和C使用LLVM,但我更喜欢OCaml,因为我这样做是为了好玩。 最佳答案 是的,参见ocamlopt-output-obj选项和章节18.7.5EmbeddingtheCamlcodeintheCcode手册。

c++ - 包括来自 C++ 的 C-DLL

这感觉像是一个菜鸟问题,所以如果是骗人的,请指出正确的位置:)我尝试将用C编写的DLL包含到C++程序中。它没有用;gcc说test.cpp:xxx:error:toomanyargumentstofunction.这是一个最小的工作示例:DLL函数的包装器:/*myWrapper.h*/#ifndef_MYWRAPPER_H#define_MYWRAPPER_H#include#ifdef__cplusplusextern"C"{#endifexternFARPROCEXPORTED_functionNameP;intGetDLLpointers();#ifdef__cplusplu

c++ - 在 DLL 中的哪里调用 LoadLibrary?

我正在制作一个DLL,它使用LoadLibrary动态加载另一个DLL(winsock)。我读到我不应该在DllMain中调用LoadLibrary,但我反复使用它并且不想每次使用它时都必须调用LoadLibrary/GetProcAddress。所以我的问题是:在DLL中调用LoadLibrary的最佳位置在哪里?LoadLibrary/GetProcAddress有多快?在每个函数中都这样做是不是开销很大? 最佳答案 创建一个在DllMain之外进行设置的初始化函数。您的代码会在加载DLL后调用该函数,然后它可以调用完成初始化所

windows - 是否可以找到 DLL 中声明的结构的大小?

我们的产品中有大量相互关联的DLL。这是一个非常“古老”的产品(因为它已经开发了20多年),并且在过去因多个版本的VisualStudio的结构打包默认值不同而受到影响。因此,在许多情况下,#pragmapack未在DLL头文件中使用,而是在项目属性中设置了结构对齐方式,我们可能会遇到这样的情况:导入DLL(通过其库和header)的项目具有不同的结构对齐方式,并可能导致结构大小不匹配。结构可以通过“意外”正确调整大小这一事实使情况变得复杂-例如如果结构的所有成员都是unsignedint那么DLL中的pack(4)和导入项目中的pack(2)可以正常工作.当然,直到有人修改结构以添加

c# - 在 Server 2008 x64 上安装 VB6 运行时

我已将所有用户从Windows7计算机转移到WindowsServer2008远程桌面。他们目前使用的app都是vb6开发的(目前正在用c#.Net开发新的app),暂时需要使用...这些应用程序似乎在Windows7中运行良好。我只是无法让它们在服务器2008中正常运行。我确实尝试运行dependencywalker,但发现它缺少“msvbvm60.dll”。追踪到实际的VB6运行时。试图找到适用于服务器2008x64的VB6运行时的下载,但没有成功。所以我只是尝试将“msvbvm60.dll”文件放入c:\windows\system32\和c:\windows\SysWOW64中