使用带有共享 mfc dll 的常规 dll
Posted
技术标签:
【中文标题】使用带有共享 mfc dll 的常规 dll【英文标题】:Using a regular dll with shared mfc dll 【发布时间】:2016-05-24 08:21:23 【问题描述】:我有一个带有共享 mfc dll 的常规 dll。它建立在 vc++ 6.0 之上。我想在 vc++ 2008 windows 窗体应用程序中使用它。它有一个头文件、一个 lib 和一个 dll。 我正在添加一些上述头文件的行
#ifdef DLLBUILD
#define DLLFUNC extern "C" __declspec(dllexport) WINAPI
#else
#define DLLFUNC extern "C" __declspec(dllimport) WINAPI
#endif
DLLFUNC int SC06StepInit(void)
当我添加此标题时,它会显示多个相同类型的错误
错误 C2144:语法错误:'int' 应该以 ';' 开头 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 没有 支持默认整数
错误从DLLFUNC int SC06StepInit(void)
行开始到以相同名称DLLFUNC
开头的所有行。我不知道使用名称而不是返回类型和名称来启动任何函数。
这个dll的源代码也具有相同的所有功能。
我想知道。这种定义函数的方式是什么,调用和使用这样的库。
【问题讨论】:
试试int DLLFUNC ...
- 更改顺序。我很确定类型必须在调用约定之前。
这个 dll 正在使用一些程序并且运行良好。我不是这个 dll 的开发者。我想用它。我想知道这种格式是什么以及如何使用它
您正在向头文件中“添加一些行”,并且您得到的编译器错误正好指向您添加的行。这很好地表明这些行在语法上是不正确的,不是吗?
【参考方案1】:
试试这个:
#ifdef DLLBUILD
#define DLLFUNC extern "C" __declspec(dllexport)
#else
#define DLLFUNC extern "C" __declspec(dllimport)
#endif
DLLFUNC int SC06StepInit(void);
你在宏中尝试了太多:
外部“C” DLL 导入/导出属性WINAPI
规范
限制它。了解您应该如何导出函数,以及您的 DLL 的客户端是谁。
【讨论】:
让我澄清一下。回答我问题的人可能会认为我正在开发一个 dll,但事实并非如此。我是这个库的客户,由于这种语法对我来说是新的,所以无法使用它。 如果您是客户,请问谁开发了 DLL 并给了您这样的标头。如果他们没有给你标题,你可以使用 Dependency Walker 来查找 函数的外观以上是关于使用带有共享 mfc dll 的常规 dll的主要内容,如果未能解决你的问题,请参考以下文章
对使用共享 MFC 核心 DLL 的 MFC 项目使用 CTrace::SetLevel