开门见山,从 C 函数返回 C++ 对象 - 只需通过输出参数返回它:
extern "C"
{
DLL_API void CreatreMyClassWrapper(SIZE inputSize, SomeClass* outputPtr)
{
*outputPtr = SomeClass(....);
}
}
在你的例子中SomeClass
== MyClassWrapperPtr
, so:
extern "C"
{
DLL_API void CreatreMyClassWrapper(SIZE inputSize, MyClassWrapperPtr* outputPtr)
{
*outputPtr = make_shared<MyClassWrapper>(inputSize);
}
}
然而,请考虑稍微改变一下你的界面,因为在当前的情况下,你需要确保你的应用程序和 DLL 应使用相同的编译器、链接器、设置、库...*
您可能想要导出Create
and Delete
从您的 DLL 中确保内存管理将在您的 DLL 中进行(这是基于此answer https://stackoverflow.com/a/1605833/1463922:
DLL
extern "C"
{
DLL_API MyClassWrapper* CreateMyClassWrapper(SIZE inputSize)
{
return new MyClassWrapper(inputSize);
}
DLL_API void DeleteMyClassWrapper(MyClassWrapper* wrapper)
{
delete wrapper;
}
}
应用
shared_ptr<MyClassWrapper> myClassWrapper(CreateMyClassWrapper(inputSize),
DeleteMyClassWrapper);