我正在使用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文件,而不是创建它,一切都很好。答案 0 :(得分:0)
感谢所有人的评论,但我现在已经弄明白了。我的问题来自于我在创建DLL期间在链接阶段使用def文件的事实。我需要在使用DLL时使用def文件,而不是创建它,一切都很好。