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

标签 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 

最佳答案

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

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

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

相关文章:

c++ - 如何追踪 Windows USER 对象泄漏?

c++ - 暂停程序直到 ofstream::flush() 完成

visual-studio - Visual studio 命令窗口——更多命令的一个别名

c++ - “Project.exe 已触发断点。”

c++ - 如何将任何值转换为对象并使用 boost::property_tree json 添加成员

c# - 是否有 Visual Studio 键盘快捷键来实现委托(delegate)?

visual-studio - 从另一个批处理文件运行一个批处理文件

c++ - Boost fusion 使用 lambda fold 参数包

c++ - 如何使用 C++ 读取文本文件的各行

c++ - 在函数模板中将一种类型名称映射到另一种类型名称