यदि सभी कोड सी ++ कंपाइलर के साथ संकलित किए जा रहे हैं तो वहां कोई (या बहुत कम) समस्या नहीं होनी चाहिए।
यदि आपके पास जी ++ के साथ संकलित जीसीसी और सी ++ के साथ संकलित है तो आपको कार्यों के एक सेट के माध्यम से सी ++ कोड को देखने योग्य बनाने के लिए अपनी कक्षा के चारों ओर एक हेडर रैपर लिखना होगा।
उदाहरण:
MyClass.h
#ifdef __cplusplus
class MyClass
{
public:
MyClass() {/*STUFF*/}
~MyClass() {/*STUFF*/}
int doStuff(int x, float y) {/*STUFF*/}
};
extern "C" {
#endif
/* C Interface to MyClass */
void* createMyClass();
void destroyMyClass(void* mc);
int doStuffMyClass(void* mc, int x, float y);
#ifdef __cplusplus
}
#endif
स्रोत फ़ाइल
MyClass.cpp
#include "MyClass.h"
void* createMyClass() {return reinterpret_cast<void*>(new MyClass);}
void destroyMyClass(void* mc) {delete reinterpret_cast<MyClass*>(mc);}
int doStuffMyClass(void* mc, int x, float y)
{
return reinterpret_cast<MyClass*>(mc)->doStuff(x,y);
}
आपका सी कोड अब सिर्फ "MyClass.h" शामिल हैं और का उपयोग करता है सी कार्यों प्रदान की।
MyCFile.c
#include "MyClass.h"
int main()
{
void* myClass = createMyClass();
int value = doStuffMyClass(myClass, 5, 6.0);
destroyMyClass(myClass);
}
स्रोत
2013-05-27 17:44:49
AFAIK, आप नहीं कर सकते। सी ++ कार्यों के लिए सी रैपर प्रदान किए बिना, और ऑब्जेक्ट्स को structs/opaque पॉइंटर्स के रूप में उजागर किए बिना। (और, ठीक है, सी ++ में पॉइंटर्स का उपयोग करना "बुरा" है।) – millimoose