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

在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?