我正在构建一个C程序,该程序显式动态地将DLL加载为插件系统的一部分。我在Windows 7上将GCC与MinGW一起使用。
DLL中导出的函数应使用哪种调用约定,以使其尽可能强大:在不同的Windows计算机上成功运行,在不同的编译器版本中生存,等等。>
我知道主可执行文件和DLL只需要使用相同的调用约定。通常如何管理?
目前,我只打算支持Windows(尽管也欢迎在Linux上也提到同一主题的答案。)>
编辑:
[请让我澄清这个问题,如@S的评论部分所述。 S. Anne。
我不太担心特定的调用约定。我更关心确保在X机上构建的二进制文件与在Y机上其他人构建的DLL(插件)之间兼容的标准方法是什么,这可能具有不同的OS等。
我能想到的一种方法是,在分发给插件开发人员的头文件中,我们定义一个宏,该宏指定插件向主程序公开的函数的预期调用约定。这些功能将由插件开发人员使用此宏定义。
例如,提供给插件开发人员的api.h
标头定义了#define CALL __cdecl
。然后,在执行#include "api.h"
之后,将插件DLL中的导出函数声明为:void CALL func(void);
。
此解决方案是否在实践中使用?有不同的方法吗?
我正在构建一个C程序,该程序显式动态地将DLL加载为插件系统的一部分。我在Windows 7上将GCC与MinGW一起使用。DLL中导出的函数应使用哪种调用约定...
否,您不必“确保在计算机X上构建的二进制文件与在计算机Y上由其他人构建的DLL(插件)之间的兼容性,该DLL可能具有不同的OS等,”