我有一个简单的问题。我有两个库,一个是用C编译的,另一个是用C++编译的,其中C库被C++库链接和加载。我需要在C库中声明一个结构体实例,使得两个库都可以读写它。你如何解决这个问题?
谢谢。
编辑:添加了要求是结构体实例而不仅仅是声明。
谢谢。
编辑:添加了要求是结构体实例而不仅仅是声明。
#ifndef YOURSTRUCT_H
#define YOURSTRUCT_H
#ifdef __cplusplus
extern "C" {
#endif
struct YourStruct
{
// your contents here
};
#ifdef __cplusplus
}
#endif
// UPDATE: declare an instance here:
extern YourStruct yourInstance;
#endif
#include "yourstruct.h"
YourStruct yourInstance;
#include "yourstruct.h"
#ifdef __cplusplus
extern "C" {
#endif
void yourFunction(YourStruct* someInstance);
#ifdef __cplusplus
}
#endif
使用extern C链接规范。
#ifdef __cplusplus
extern "C" {
#endif
struct YourStruct
{
};
#ifdef __cplusplus
}
#endif
extern struct YourStruct *yourstruct_instance;
从您的C库中导出结构体的实例。让C++库包含C库的头文件。
在C库的.h文件中:
#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport) struct MyStruct
{
// members
}
extern __declspec(dllexport) struct MyStruct myInstance;
#ifdef __cplusplus
}
#endif
__declspec(dllexport) struct MyStruct myInstance;
您的 C 和 C++ 代码可以操作 myInstance
。
请参阅 this 文章以获取更多信息。此外,尝试创建一个新的 C++ dll 项目并勾选“导出符号”框。这将创建一个带有导出类和该类实例的 c++ dll。在 C 中进行相同的导出结构体操作非常相似。