我在运行时动态加载DLL。兼容的DLL将具有一个函数,该函数返回[指向]插件工厂对象的集合(随后将为主应用程序提供其各自插件的实例)。
该函数使用C ABI来缓解名称重整并启用发现*。
在伪代码中,它看起来像这样:
Collection<Factory*> GetFactories();
工厂是由DLL中的/分配的静态对象。
这样做的最佳/正确方法是什么?
GetFactories()返回指向某种Factory集合的指针?
GetFactories()向一个结构返回一个指针(或引用?),该结构包含[指向]工厂数组和数组大小的指针?
GetFactories()返回Factory指针的向量(raw?unique_ptr?)?
GetFactories()返回一个Factory 对象的数组(并由GetFactoryCount补充)()函数应首先调用以获取大小)?
调用GetFactories(Factory []&amp;)并引用预分配的Factory数组(其大小首先由GetFactoryCount()获取?或者通过引用预分配的向量调用?
等等等(我相信还有更多选择)......
我现在只用C ++编写了几个星期的时间,有时它是一个完整的思想,试图概述所有相关的考虑因素和模糊的规则以及一个看似需要注意的特殊情况。什么可以跨越边界,具有不同的堆,与编译器不兼容,范围,支持/可以暴露/破坏的地方,原始指针,智能指针,引用,复制,“最佳实践”与我的情况(总是似乎是一些边缘情况)..感觉就像试图驯服一种野生的,不守规矩的动物。
无论如何 - 如果有人在这里有任何提示,我将不胜感激。我一直在寻找,相信我,但要么答案相互矛盾,某些人的个人偏好,或者他们的情况都不完整。
* 会吗?是否使用C ABI(extern "C"
)来规避编译器不兼容的问题?