Articles of DLL

C运行时对象,dll边界

deviseC API的最佳方法是处理传递与C运行时相关的“对象”(FILE *,由malloc返回的指针等)的问题。 例如,如果两个DLL与不同版本的运行时间链接,我的理解是,您不能安全地将一个DLL从一个DLL传递给另一个DLL。 是唯一的解决scheme使用Windows相关的API(这是保证在DLL工作)? C API已经存在,并且已经成熟,但是主要是由unixdevise的(当然还是要在unix上工作)。

如何在C ++中添加库?

Iam新的C ++,我想用VS 2013添加NLopt库到C ++。NLopt是一个非线性优化库( http://ab-initio.mit.edu/wiki/index.php/NLopt_C-plus-plus_Reference #Compiling_and_linking_your_program_to_NLopt )。 NLopt有一个DLL文件和.h文件,我无法弄清楚一个办法让他们工作。 我很感激任何人都可以给我一个关于如何导入这个库的快速指南。 先谢谢你。

在Windows .rc文件/ dll中使用string型资源标识符

我们的代码库中有许多MFC扩展DLL,其中许多embedded了项目.rc文件(IDS _…,IDD _…,IDB _…等)中定义的Windows资源。 我们使用数字标识符来定义我们的资源,特别注意我们的资源ID不会在dll之间冲突,这需要一些pipe理来确保我们的开发人员不使用相同的编号。 我意识到stringtypes的资源标识符可能是一个简单的方法,这意味着我们可以为每个不同的dll中的每个资源定义唯一的标识符。 我的问题是,有没有这样做的技术问题,例如: MFC的DLL /资源链仍然会正常工作? Visual Studio资源编辑器仍然工作吗? 我在MS技术说明中没有发现任何东西,说这是一个问题 – 我只是想知道,如果人们有这方面的经验。

如何以编程方式确定Windows可执行文件的DLL依赖关系?

如何确定哪些DLL是一个二进制文件依赖于使用编程方法? 要清楚,我不是要确定正在运行的exec的DLL依赖关系,而是确定任意exec(可能缺less必需的DLL)的DLL依赖关系。 我在找一个在C / C ++应用程序中实现的解决scheme。 这是我的应用程序需要在运行时完成的事情,不能由第三方应用程序(如依赖)来完成。

如何重命名一个DLL,但仍然允许EXEfind它?

我们有一个在内部生成的DLL,并且我们有关联的静态LIB的存根。 我们也有一个使用这个DLL的EXE,它使用静态链接到DLL的LIB文件的简单方法(即,不是手动使用LoadLibrary)。 当我们部署EXE的时候,我们希望DLL文件的名字因混淆原因而改变(根据客户的要求)。 我们如何做到这一点,使我们的EXE仍然自动findDLL? 我试图重命名DLL和LIB文件(在它们被构build为正常名称之后),然后将EXE项目设置更改为与重命名的LIB链接。 这在运行时失败,因为我猜DLL的名字被烘焙到了LIB文件中,而不是简单地被链接器用“.dll”replace“.lib”来猜测。 一般来说,我们不希望将这个混淆应用到DLL的所有用途,所以我们希望保持当前的DLL项目输出文件是它们。 我希望有一种方法可以编辑DLL的LIB文件,并用别的东西replaceDLL文件的硬编码名称。 在这种情况下,这可以完全在EXE项目中完成(也许作为预先构build步骤)。 更新 :我发现延迟加载不起作用,因为我的DLL包含导出的C ++类。 看到这篇文章 。 有没有其他的select?

windeployqt错过了一些库,并获取其他不需要的

通常要部署一个Qt项目我要么: 继续运行它,并find它抱怨的库缺失,并添加它们,直到没有更多。 使用依赖的步行者,让我最大的方式(如果不是全部),然后回到选项1。 或者只是创build一个静态链接的版本(有时在屁股疼痛) 所以我现在想试试windeployqt,对于我在D:\install\Qt\5.5\mingw492_32\bin\ 然后我运行它使用: D:\>D:\install\Qt\5.5\mingw492_32\bin\windeployqt.exe d:\software\build-qtGuiTestApp-Desktop_Qt_5_5_0_MinGW_32bit-Debug\debug 这里是结果输出: D:\software\build-qtGuiTestApp-Desktop_Qt_5_5_0_MinGW_32bit-Debug\debug\qtGuiTes tApp.exe 32 bit, debug executable Adding Qt5Svg for qsvgicond.dll Skipping plugin qmldbg_qtquick2d.dll due to disabled dependencies. Skipping plugin qmldbg_tcpd.dll due to disabled dependencies. Direct dependencies: Qt5Core Qt5Network Qt5WebKitWidgets Qt5Widgets All dependencies : Qt5Core Qt5Gui Qt5Multimedia Qt5MultimediaWidgets Qt5Networ k Qt5OpenGL Qt5Positioning Qt5PrintSupport Qt5Qml Qt5Quick Qt5Sensors Qt5Sql […]

如何将第三方Windows DLL组织到我的应用程序文件夹中的子文件夹中?

我们有一个应用程序依赖于许多第三方DLL组。 不幸的是,这些第三方DLL的编写者没有一个非常一致地命名它们,所以很难看出哪个DLL是什么组的一部分。 为了尝试和pipe理这个,我们希望将第三方DLL组放在应用程序文件夹的一个文件夹中,而不是像这样在应用程序旁边。 –> Application Folder –> Application.exe –> MyDLL1.dll –> MyDLL2.dll –> Third Party 1 DLL folder –> Third Party 1 DLL 1.dll –> Third Party 1 DLL 2.dll –> Third Party 1 DLL 3.dll –> Third Party 2 DLL folder –> Third Party 2 DLL 1.dll –> Third Party 2 DLL 2.dll –> […]

在Windows下dynamic加载的库的地址范围

我有一个工作程序,加载LoadLibrary插件。 新的要求:在代码的某一点,我给了一个指针,我需要testing这个指针是指向代码还是插件的静态数据。 bool is_pointer_into_plugin(void *p, HMODULE h); 等价地,我需要检索指针指向的插件(如果有的话)。 我还需要知道指针是指向主程序的代码还是静态数据(最好是区分只读区域和读写区域)。 HMODULE plugin_containing_pointer(void *p); 等同地,我需要能够检索插件映射的范围(地址和大小)。 我也需要这个主要程序的信息。 我如何实现is_pointer_into_plugin ,或者plugin_containing_pointer ,或者其他什么东西? 如有必要,我可以更改对LoadLibrary的调用。 查找应该尽可能快,加载时间代码不需要很快。 在单独的进程中运行插件并通过共享内存进行通信不是一种select。 该程序必须运行在Windows XP和以上(和Linux,但这是另一个问题 )。 我需要的信息或多或less是Sysinternals公用事业listdlls报告的,所以我试图找出它是如何实现的。 我看到了使用NtQueryInformationProcess来检索链接到LDR_DATA_TABLE_ENTRY的PEB结构的LDR_DATA_TABLE_ENTRY 。 看起来很有希望,但是: 我可以看到一个DllBase ,看起来它可能是每个DLL的起始地址(是吗?),但没有大小。 NtQueryInformationProcess的文档将NtQueryInformationProcess标记为不可移植的,但是并不表示我正在尝试做什么。 在我的系统中, PEB中唯一的字段是BeingDebugged和SessionId ,加上一些Reserved N字节数组 – 不是一个好兆头。 我如何枚举插件的地址范围,或testing一个指针是否在一个插件,或确定一个指针指向哪个插件?

问题使用pantheios文件股票后端

我想使用pantheios文件股票后端从我的dlllogin在c + +。 文件被创build,但没有被写入文件。 这是我的代码片段 if (pantheios::pantheios_init() < 0) { MessageBox(NULL, "Init Failed", "fvm", MB_OK); }else { MessageBox(NULL, "Init Passed", "fvm", MB_OK); pantheios::log_INFORMATIONAL("Logger enabled!"); } DWORD pid = GetCurrentProcessId(); sprintf_s(moduleName, sizeof(moduleName), "C:\\%d.log", pid); pantheios_be_file_setFilePath(moduleName, PANTHEIOS_BE_FILE_F_TRUNCATE,PANTHEIOS_BE_FILE_F_TRUNCATE, PANTHEIOS_BEID_LOCAL); pantheios::log(pantheios::debug, "Entering main"); 我得到Init Passed消息框,但没有日志语句被转储到文件中。

在DLL中声明的全局variables会发生什么?

比方说,我用C ++编写了一个DLL,并用一个不重要的析构函数声明了一个类的全局对象。 当DLL被卸载时会调用析构函数吗?