使用带有共享 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的主要内容,如果未能解决你的问题,请参考以下文章

在共享DLL中使用MFC与在静态库中使用MFC的区别

在共享DLL中使用MFC与在静态库中使用MFC的区别

对使用共享 MFC 核心 DLL 的 MFC 项目使用 CTrace::SetLevel

在共享DLL中使用MFC 和在静态库中使用MFC的区别

CRichEditCtrl 在使用 MFC 编写的共享 dll 中无法正常工作?

DLL动态链接库如何共享数据和如何创建纯资源DLL