如何在C调用C++成员函数
直接上代码:
test.cpp
#include "test.h"
#include <stdio.h>
void Apple::TestPrintf(void)
{
printf("TestPrintf");
}
test.h
#ifndef __APPLE_H__
#define __APPLE_H__
class Apple
{
public:
void TestPrintf(void);
};
#endif
如果需要在C中调用C++的成员函数,我们需要进行C++的成员函数进行封装,此时需要创建两个文件AppleWrapper.cpp/AppleWrapper.h 。
AppleWrapper.cpp
#include "AppleWrapper.h"
#include "test.h"
#ifdef __cplusplus
extern "C" {
#endif
struct tagApple
{
Apple apple;
};
struct tagApple *GetInstance(void)
{
return new struct tagApple;
}
void ReleaseInstance(struct tagApple **ppInstance)
{
delete *ppInstance;
*ppInstance = 0;
}
void TestPrintf(struct tagApple *pApple)
{
pApple->apple.TestPrintf();
}
#ifdef __cplusplus
}
#endif
AppleWrapper.h
#ifndef _APPLE_WRAPPER_H__
#define _APPLE_WRAPPER_H__
#ifdef __cplusplus
extern "C" {
#endif
struct tagApple;
extern struct tagApple *GetInstance(void);
extern void ReleaseInstance(struct tagApple **ppInstance);
extern void TestPrintf(struct tagApple *pApple);
#ifdef __cplusplus
}
#endif
#endif
封装了过后就直接在main.c文件中调用即可。
#include "AppleWrapper.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
int main(void)
{
struct tagApple * pApple;
pApple = GetInstance();
TestPrintf(pApple);
ReleaseInstance(&pApple);
assert(pApple == 0);
return 0;
}