Rob*_*ert 5 c++ dll plugins interface
我打算做一个C++插件接口ala 如何从dll创建一些类(dll中的构造函数)?(с++) 但是有人担心如果接口用于通过MinGW或Borland和DLL创建DLL loader是用MSVC++编译的,可能有问题.由于唯一导出的函数被声明为extern"C",我不明白为什么它不起作用?
想法?
Tob*_*ner 11
如果要在编译器(和Release/Debug)之间兼容并使用C++,则需要更多努力.
基本上 - 您可以传递基本数据类型和指向纯虚拟类的指针.这些类不能包含任何数据成员,它们的析构函数不能是公共的,并且它们不应该具有重载函数.
内存不能在一个dll中分配,而在另一个dll中释放.这意味着没有例外,您需要某种引用计数或返回机制.
纯虚拟类(又称"接口")中的所有方法都必须使用调用约定标记(我更喜欢stdcall).
动态强制转换也是不可能的,因此您可能需要在所有接口中使用某些功能来完成这一操作(如COM中的QueryInterface).
这是有效的,因为win32上的大多数编译器都尝试兼容COM并以COM兼容的方式解决相同的问题.要获取第一个接口,需要从dll导出的普通C函数.
如果您只使用C函数和C数据类型,一切都会正常工作.但是你只能在没有类和继承的情况下使用C语言.
我希望有所帮助.
名称修改不是问题:
1st:如果你使用带有C数据类型的C函数,一切都已定义,没有名称重整(例外:在VS中使用STDCALL,你需要通过Linker指令将名称重新映射到"普通"C名称)
第二:类中的方法不会被导出,因此不会被破坏.您可以通过指向纯虚拟类(也称为"接口")的方法调用方法.这使用偏移而没有名称.你仍然不能使用析构函数,因为据我所知,vtbl中析构函数的位置并不固定.
如果将结构传递给函数/方法,请确保修复对齐.它不是在不同的编译器中定义的.