From: Michael G. <mg...@te...> - 2004-07-27 20:42:31
|
> To help you with your problem: > You can still write the majority of your code using C++, classes > etc. (try to avoid exceptions). But you'll have to provide proxy > functions that can be called from C if you wish to mix compilers. Here is a simple example what I mean by 'proxy function' A.hpp =2D*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- class A { public: A() {_a=3D0;} long getA() {return _a;} void setA(long l) {_a=3Dl;} private: long _a; } =2D*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- Aproxy.cpp =2D*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- #define MY_CLASS_A_DLL include "Aproxy.h" __declspec(dllexport) AHANDLE ACreate() { return new A(); } __declspec(dllexport) long AGetMemberA(AHANDLE aParm) { A* a =3D (A*)aParm; return a->getA(); } __declspec(dllexport) void ACreate(AHANDLE a, long l) { A* a =3D (A*)aParm; a->setA(l); return; } typedef LHANDLE AHANDLE; #ifdef __cpluspls extern "C" { #endif // declare all proxy functions, e.g. AHANDLE ACreate(); long AGetMemberA(AHANDLE ahnd); #ifdef __cpluspls } #endif #undef IMPORTAPI =2D*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- Aproxy.h =2D*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- #ifdef MY_CLASS_A_DLL #define IMPORTAPI __declspec(dllexport) #else #define IMPORTAPI __declspec(dllimport) #endif typedef LHANDLE AHANDLE; #ifdef __cpluspls extern "C" { #endif // declare all proxy functions, e.g. // (omit APIENTRY if you don't need it) IMPORTAPI APIENTRY AHANDLE ACreate(); IMPORTAPI APIENTRY long AGetMemberA(AHANDLE ahnd); IMPORTAPI APIENTRY long ASetMemberA(AHANDLE ahnd, long l); #ifdef __cpluspls } #endif #undef IMPORTAPI =2D*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- snip -*- There are missing a few wistles and bells but I hope you get the idea. Best, Michael =2D-=20 Vote against SPAM - see http://www.politik-digital.de/spam/ Michael Gerdau email: mg...@te... GPG-keys available on request or at public keyserver |