编译别人的vs c ++ app - 不一致的链接

时间:2010-12-12 15:56:01

标签: c++ visual-studio

喜 我不是一个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 

1 个答案:

答案 0 :(得分:3)

在“解决方案资源管理器”窗口的“属性”中右键单击该项目。配置属性,C / C ++,预处理器,预处理器定义设置。验证您是否在那里看到CPLAPPLET_PROGRAM_EXPORTS。如果你没有,那就添加它。

您也很可能需要一个.def文件,以便重命名导出。确保它存在于项目的文件列表中。构建之后,在生成的DLL上使用Dumpbin.exe / exports,并确保导出存在并正确拼写为“DllUnregisterServer”,不带任何其他字符。需要得到作者的帮助并非不太可能,因为COM出口的处理方式似乎非常不合格。