尽量不要对这个问题判断我。
如果我尝试在使用MinGW工具链(g ++)编译的Visual Studio项目中使用DLL(用C ++编写),我会遇到问题吗?
如果答案是肯定的,有人可以解释一下原因吗?
答案 0 :(得分:4)
就代码执行而言,如果它以Windows为目标,那么它应该运行。
互操作性;它取决于从dll中公开的API。
正如评论中所述,可能值得一提; “C”风格的API不仅仅是函数调用,兼容性包括(但不限于)诸如此类的东西;
new
和delete
,malloc
和free
,CustomAlloc
和CustomDealloc
)__stdcall
)对于C ++ ABI,除上述所有内容外,不兼容性还包括;
new
和delete
的单独和不同实现,以及自定义内存池等。这些不是全面的列表,但是它们可以在某种程度上激发的一般建议,使用相同的工具链和相同的编译器/链接器设置。
答案 1 :(得分:0)
问题不在于DLL。它是关于如何向编译器描述这样的DLL(即头文件和导出)。
这些描述会影响您的代码在数据布局上的期望(例如,不同的编译器可能具有不同的默认对齐和填充),甚至不同的代码路径(例如,解析为不同的内联函数和宏,例如在STL情况下)。
然后每个编译器可能有不同的名称修改方案,你可能需要一点点破解来粘合代码。
对上述问题非常谨慎,使用不同编译器的DLL应该没问题。
答案 2 :(得分:-3)
不,因为它是一个标准。事实上,使用gcc编译的C ++应用程序从OS dll文件调用系统函数。所以不管你是手动还是自动打电话,都是一样的。