Windows上的DLL项目:未解析的外部符号

时间:2013-05-09 15:01:05

标签: c++ windows dll visual-studio-2012

我正在使用Visual Studio 2012创建一个DLL项目,目的是从Delphi项目中调用函数。我已经通过将我的函数包装在extern“C”{/ * ... * /}中来关闭C ++名称修改,但为了避免C名称修饰,我使用的是DEF文件。

以下是一段代码,描述了我如何制定内容:

// MyFile.h

#ifdef MYPROJECT_EXPORTS
#define MYPROJECT_API __declspec(dllexport)
#else
#define MYPROJECT_API __declspec(dllimport)
#endif

extern "C" {
    extern MYPROJECT_API void __stdcall do_something();
}

.cpp文件具有等效结构。一切都很好。

我在项目文件夹中添加了一个.def文件,其中包含以下内容:

LIBRARY MyProject
EXPORTS
    do_something=_do_something@0

当我构建我的项目时,一切正常。但是,当我添加链接器选项

/DEFS:MyProject.def

我开始收到有关未解析的外部符号的错误。以前有人有过这种问题吗?我不是C ++或C的新手,但这是我第一次在Windows上构建DLL,因为我主要是Unix开发人员。我的假设是我误解或误用了__declspec装饰器,因为它只在我链接到def文件时中断:当我从链接器选​​项中删除该标志时,它干净地构建,除了C风格的装饰符号。

编辑:感谢大家的评论,但我现在已经弄清楚了。我的问题来自于我在创建DLL期间在链接阶段使用def文件的事实。我需要在使用DLL时使用def文件,而不是创建它,一切都很好。

1 个答案:

答案 0 :(得分:0)

感谢所有人的评论,但我现在已经弄明白了。我的问题来自于我在创建DLL期间在链接阶段使用def文件的事实。我需要在使用DLL时使用def文件,而不是创建它,一切都很好。