喜 我不是一个c ++开发人员,我正在尝试编译其他人的应用程序。构建成功,但我得到5'不一致的dll链接'警告。
dll构建但在现有dll所在的相同场景中不起作用。没有代码更改。
经过一些谷歌搜索,我认为它与此有关,在头文件中找到:
#ifdef CPLAPPLET_PROGRAM_EXPORTS
#define CPLAPPLET_PROGRAM_API __declspec(dllexport)
#else
#define CPLAPPLET_PROGRAM_API __declspec(dllimport)
#endif
并且代码中有一条注释,说明在命令行中定义了CPLAPPLET_PROGRAM_EXPORTS。
警告发生在导出的函数上,如下所示:
HRESULT _stdcall CCplApplet_PROGRAM::DllUnregisterServer()
{
// our code added here
return 0;
}
有人能指出我在正确的方向吗?
谢谢。编辑以发表评论:
我在vs 2008中创建了一个c ++ win32 dll项目,我已经将他们的.cpp,.h和.def文件添加到了这个项目中,但就是这样。而不是单击“构建”我想知道我是否需要专门使用.def文件或其他东西?
头文件定义了如下方法:
class CPLAPPLET_LNK_PROGRAM CCplApplet_PROGRAM {
public:
static LONG APIENTRY CPlApplet(HWND hWnd, UINT uMsg, LONG lParam1, LONG lParam2);
private:
...
HRESULT _stdcall DllUnregisterServer(void);
...
};
.def文件:
LIBRARY "CplApplet_PROGRAM"
EXPORTS DllUnregisterServer PRIVATE
答案 0 :(得分:3)
在“解决方案资源管理器”窗口的“属性”中右键单击该项目。配置属性,C / C ++,预处理器,预处理器定义设置。验证您是否在那里看到CPLAPPLET_PROGRAM_EXPORTS。如果你没有,那就添加它。
您也很可能需要一个.def文件,以便重命名导出。确保它存在于项目的文件列表中。构建之后,在生成的DLL上使用Dumpbin.exe / exports,并确保导出存在并正确拼写为“DllUnregisterServer”,不带任何其他字符。需要得到作者的帮助并非不太可能,因为COM出口的处理方式似乎非常不合格。