我可以将可执行文件构建为dll吗?

时间:2013-12-30 17:55:12

标签: c++ visual-studio-2010 dll mfc exe

我需要创建一个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);

为了以防万一,我还在头文件中包含了头文件。我想知道为什么这个功能不会作为出口出现?我该怎么办?

1 个答案:

答案 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 一词。