我需要创建一个dll,其中包含我在visual studio 2010中的可执行项目中的内容。我意识到不是创建一个dll项目,我可以只更改项目属性中的项目配置>>一般>> '配置类型'到'dll'并且它构建良好。它创建了dll。我添加了一个额外的.h / .cpp文件,其中包含我想要的导出函数。
我首先担心的是这是一个合法的dll吗?我试图使用LoadLibrary()
加载它但我得到错误代码126(找不到指定的模块)虽然dll在项目目录中(与可执行文件相同)。我只是想知道它是否与任何原因可能不是一个完全合格的dll的事实有关?我的exe项目是MFC项目。
** 更新 **
感谢评论,我现在可以成功加载dll - 这是依赖性问题。但是GetProcAddress()
不会返回导出函数的有效指针。 dumpbin /exports
实用程序显示dll没有导出函数!
所以我只将.h / cpp文件添加到原始项目中,该项目现在有一个简单的虚拟函数可供导出。
__declspec(dllexport) int MakeDouble(int value);
为了以防万一,我还在头文件中包含了头文件。我想知道为什么这个功能不会作为出口出现?我该怎么办?
答案 0 :(得分:2)
首先:
__declspec(dllexport) int MakeDouble(int value);
函数声明应该具有与定义相同的签名,当然,函数必须具有定义(简单return 0;
应该有效}
第二
导出的函数名称用漂亮的奇怪字符装饰,你应该使用extern“C”(或MS特定的stdcall + .def文件)。:
//.h
extern "C" __declspec(dllexport) int MakeDouble(int value);
//.cpp
extern "C" __declspec(dllexport) int MakeDouble(int value) {
return 0;
}
您还应该在项目属性中签入选项:
Configuration Properties -> C/C++ -> Code Generation -> Runtime Library
确保该值包含 DLL
一词。