gpt4 book ai didi

c++ - 编译别人的 vs c++ 应用程序 - 不一致的链接

转载 作者:行者123 更新时间:2023-11-28 01:09:06 26 4
gpt4 key购买 nike

嗨我不是 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

最佳答案

在“解决方案资源管理器”窗口中右键单击“属性”中的项目。配置属性、C/C++、预处理器、预处理器定义设置。确认您在那里看到 CPLAPPLET_PROGRAM_EXPORTS。如果您不这样做,请添加它。

您也很可能需要一个 .def 文件以便重命名导出。确保它存在于项目的文件列表中。构建后,在生成的 DLL 上使用 Dumpbin.exe/exports 并确保存在导出并正确拼写“DllUnregisterServer”且没有任何其他字符。需要作者帮助的可能性不大,顺便说一句,COM 导出的处理方式似乎很不标准。

关于c++ - 编译别人的 vs c++ 应用程序 - 不一致的链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4422488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com