P
xenayoo schrieb:
Jetzt mach ich aber große Augen...
Shame on me - Klassen/struct-namen werden offenbar garnicht gemangelt, wenn sie nicht in irgendwelchen Namensräumen liegen. Man sieht, ich habs noch nie wirklich ausprobuiert, kenns nur in der Theorie - und auch das offenbar nciht richtg... Wenn du Lust hast, könntest du mal folgendes probieren: (.cpp mit C++-Compiler, .c mit C-Compiler):
1) zwei Header:
//myclass.hpp
//die DLL-Klasse: eine ganz normale C++-Klasse, nur struct genannt,
//damit der C++-Compiler bei der C-Deklaration später nicht meckert
struct MyClass
{
MyClass(int i_) : i(i_) {}
int geti() const {return i;}
void seti(int i_) {i = i_;}
private:
int i;
};
/* myclass_c.h - ein C-Header */
struct MyClass;
struct MyClass* newMyClass(int);
int getiMyClass(struct MyClass const*);
void setiMyClass(struct MyClass*, int);
void deleteMyClass(struct MyClass*);
2) die DLL-Source, in C++
//myclass_c.cpp
#include "myclass.hpp"
extern "C" {
#include "myclass_c.h"
MyClass* newMyClass(int i) { return new MyClass(i); }
int getiMyClass(struct MyClass const* pmc) { return pmc->geti(); }
void setiMyClass(struct MyClass* pmc, int i) { pmc->seti(i); }
void deleteMyClass(struct MyClass* pmc) {delete pmc; }
} //end extern "C"
3) die C-Source
/* main.c */
#include "myclass_c.h"
#include <stdio.h>
#include <stdlib.h>
typedef struct MyClass* MCP;
int main(void)
{
MCP mcp = newMyClass(25);
printf("i vorher: %d\n", getiMyClass(mcp)); //25
setiMyClass(mcp, 42);
printf("i nachher: %d\n", getiMyClass(mcp)); //42
deleteMyClass(mcp);
return 0;
}
bin gespannt...