Articles of DLL

“用静态运行时混合一个dll boost库是一个非常糟糕的主意……”

我在Visual Studio解决scheme中有两个项目。 一个构build一个静态的LIB,另一个构build一个dynamic的DLL。 两者都使用静态运行时链接(/ MT和/ MTd),并使用Boost。 Boost不是我的决定 – 我想挑选它,但是我被委员会推翻了。 LIB生成良好,但DLL从auto_link.hpp(第354行)咳嗽了一个错误:“混合使用静态运行时的dll boost库是一个非常糟糕的主意……”。 #if (defined(_DLL) || defined(_RTLDLL)) && defined(BOOST_DYN_LINK) # define BOOST_LIB_PREFIX #elif defined(BOOST_DYN_LINK) # error "Mixing a dll boost library with a static runtime is a really bad idea…" #else # define BOOST_LIB_PREFIX "lib" #endif 我没有定义BOOST_DYN_LINK。 看来Boost正在做一个跳跃,因为我正在构build一个DLL(_USRDLL和_​​WINDLL被定义),我必须要dynamic运行时链接(/ MD或/ MDd,它定义_DLL)或DLL连接Boost。 这是不正确的,因为我特别要求静态链接(/ MT或/ MTd)。 我提交了一个针对Boost的错误报告 ,因为它的错误假设,但是这并不能帮助我使用这个库。 在报告中,Boost维护人员坚持认为,尽pipe事实certificate我不是,但Boost在至less30个文件中操纵它。 我在Boost邮件列表上find了一个答案 […]

链接:.a,.lib和.def文件

我正在使用GNU binutils在Windows上构build一个dll。 我知道DLL可以加载时,可执行文件加载或运行时(使用LoadLibrary API调用)。 对于加载时加载,我似乎只需要dll文件:不需要.a,.lib或.def文件。 我想知道这些文件格式代表什么和他们的目的是什么。 我所知道的和一些具体的问题: .a是Unix上通常用于静态库的扩展。 .a文件是使用GNU ld的–out-implib选项生成的。 据说这是一个“import图书馆”,够公平的。 现在的问题是“如果链接时不需要导入库,对我有什么好处?” .lib是在Windows上用于静态库的扩展,根据维基百科,它也被用作windows下的“导入库”,所以我强烈怀疑它们只是binutils调用.a文件的另一个名称。 真假 ? 我可以find所有页面.def文件列出了导出的DLL符号。 这与“import图书馆”应该做什么有些类似? 此外,我在这里读到,使用.def文件是手动指定源文件中的导出(我所做的)的替代方法。 但我也记得阅读(无法find参考).def文件提供一个索引( 序数 )到导出的符号,允许更快的运行时加载。 是这样吗 ?

链接到一个大的地址感知DLL

假设我有一个用LARGEADDRESSAWARE链接器标志集合构build的DLL。 现在我有一个应用程序dynamic链接到这个DLL。 这是否使我的应用程序LARGEADDRESSAWARE? 如果不是,那么有没有这个标志设置为任何DLL的意义?

Golang:调用Windows DLL函数

我正在写一个Go应用程序,调用到一个Windows DLL。 该DLL是用MSVC编写的,并使用__declspec(dllexport)具有外部“C”导出。 我的Go应用程序的顶部如下: //#cgo CFLAGS: -IC:/Repos/Module/include //#cgo LDFLAGS: -L. C:/Repos/Module/go/bin/MyModule.dll //#include <MyModule.h> import "C" 我从模块调用函数如下所示: nRet := C.moduleImpl_len() 问题是,当我尝试运行这个应用程序,我得到以下错误: C:\Users\MINDO~1\AppData\Local\Temp\go-build836751819\mod\modimpl\_obj\modimpl.cgo2.o: In function `_cgo_e2aaf076ab69_Cfunc_moduleImpl_len': C:/Repos/Module/go/src/mod/modimpl/modimpl.go:90: undefined reference to `moduleImpl_len' 我用DUMPBIN查看了DLL导出的符号,并且显示了正确的“moduleImpl_len”作为导出的符号。 这也是MyModule.h中定义的符号。 任何build议,我怎样才能得到符号链接,而不必去系统调用路线?

DLL从其父(符号)获取符号

我正在将程序移植到MS Windows。 这个程序使用dynamic加载的插件。 主程序中的插件引用符号。 如果没有解决所有符号,我甚至无法通过链接器获取DLL。 有没有办法解决这个问题?

延迟加载DLL

我迫切需要帮助,我需要在Visual Studio中pipe理应用程序依赖项。 应用程序仅在特定版本的Windows上链接到DLL,可以说Windows 7,而在其他环境下,不应加载该DLL。 我将如何能够实现这一点,使用DLL延迟加载作为这个话题对我来说是全新的,并没有任何关于这个特定的事情在线提供很好的参考。 问候

获取进程主线程的句柄

我在一些小的testing应用程序中创build了一个额外的线程,并希望从这个额外的线程挂起主线程。 额外的线程是通过CreateRemoteThread从外部进程创build的。 由于SuspendThread需要一个HANDLE来挂起线程,我想知道如何从我的附加线程中运行的代码中获得这个HANDLE 。

用createremotethread注入一个dll

createremotethread如何在进程内部执行一个dll? 它使用的参数之一是loadlibraryA。 所以我得到它在进程中执行loadlibrary函数的地方。 然后它应该使上下文切换到内核模式。 dll是否被loadlibrary函数返回值的进程执行?

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文件,我无法弄清楚一个办法让他们工作。 我很感激任何人都可以给我一个关于如何导入这个库的快速指南。 先谢谢你。