我有C代码调用C++代码.C++代码创建一个对象,然后将其传递回C代码,该代码将对象存储在结构中:
extern "C" void cppFn(?** objectPtr)
{
*objectPtr = new Object();
}
void cFn()
{
THESTRUCT theStruct = {0};
cppFn(&(theStruct.objectPtr));
}
typedef struct THESTRUCT
{
?* objectPtr;
} THESTRUCT;
Run Code Online (Sandbox Code Playgroud)
我的问题:objectPtr使用的接受类型是什么?
void.像这样:
typedef struct THESTRUCT {
void* objectPtr;
} THESTRUCT;
Run Code Online (Sandbox Code Playgroud)
void*是一种"通用"指针类型.(你必须将它转换为其他类型才能使用它.由于没有类型将它强制转换为C端,因此它实际上是一个不透明的指针.)
另一种方法是为您的C++类型制作前向声明,而不定义它(因为在C端不可能这样做).因此,如果调用了C++类型,则foo可以执行以下操作:
struct foo;
typedef struct THESTRUCT {
struct foo* objectPtr;
} THESTRUCT;
Run Code Online (Sandbox Code Playgroud)