chubbson - Mo 27.04.09 09:07
Titel: c++ header file -> c# portieren
Guten Morgen.
Ich habe eine banale Frage und bräuchte kurz eure Unterstützung.
Es geht darum, wie ich c++ headerfiles nach c# portieren kann.
Ich nehm mal nicht an das ich da einfach schnell in VS mal auf ein Portier knopf drücken kann und der schreibt mir schnell alles um ;D (reflektion mässig)
Hier ein paar snippet:
Aus dem c++ headerfile..
C#-Quelltext
1: 2:
| #ifndef Test_H #define Test_H |
Kann ich 1 zu 1 in c# schreiben, nehm ich an
Das schreib ich um und nehms ins using
using System.Windows;
C#-Quelltext
1:
| #define TEST_VERSION 0x160 |
Das denk ich kann ich so belassen.
C#-Quelltext
1: 2: 3: 4: 5:
| #ifdef TESTDLL #define EXPORT __declspec(dllexport) #else #define EXPORT #endif |
Hier weiss ich nich genau was der __declspec(dllexport) genau soll und wofür der zuständig is.
C#-Quelltext
1:
| #define CALL __stdcall |
kann ich gleich implementieren um damit dann später die DLL funktonen aufurufen..
C#-Quelltext
1:
| typedef DWORD HTARGET; |
hmm hier müsst ihr mir kurz sagen wie das in c# ausschauen soll. sowas wie DWord gibs da doch nimcht merh oder?
C#-Quelltext
1:
| #define ARGB(a,r,g,b) ((DWORD(a)<<24) + (DWORD(r)<<16) + (DWORD(g)<<8) + DWORD(b)) |
Hier das selbe.. da kann ich mir auf die schnell keinen reim machen. Mit Bitoperatoren hab ich leider noch nie mit gearbeitet.
C#-Quelltext
1:
| #define BLEND_ZWRITE 4 |
Kann ich so belassen um den Variablen Bitwerte zuzuweisen (0,1,2,4,8,16)
C#-Quelltext
1: 2: 3: 4: 5:
| enum testBoolState { TEST_DONTSUSPEND = 24, TEST_HIDEMOUSE = 25, }; |
Einem Enum kann man in c# auch den feldern eigene Werte geben, sollt also auch kein problem sein
C#-Quelltext
1: 2: 3: 4: 5:
| struct testVertex { float x, y; DWORD col; }; |
EIn struct.. hab ich auch noch nie angewendet.. gibt es das noch in c#
So und jetzt mein grösstes problem .. eine interfaceklasse die Funktionen aus einer DLL zur verfügung stellt.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| class TEST { public: virtual void CALL Release() = 0; virtual char* CALL System_GetErrorMessage() = 0;
virtual void* CALL Resource_Load(const char *filename, DWORD *size=0) = 0; virtual void CALL Resource_Free(void *res) = 0; |
Mit diesen 4 beispielfunktionen sind glaube ich alle vorkommenden Funktionen abgedekt..
Was mache ich mit diesen char *filename und Dword..
Soweit ich weiss kann ich ja nicht mehr wirklich mit pointern etc in c# arbeiten .
C#-Quelltext
1:
| extern "C" { EXPORT TEST * CALL testCreate(int ver); } |
Hmm für was steh hier das extern?
Naja das waren mal die wichtigsten FUntionen und definitionen in dem header File..
Wie ihr vielleicht sehen konntet.. fehlen mir die grundlagen auf der Binär ebene.
Wenn es dann soweit is.. und man alles portieren konnte ... dann nehm ich das ganz einfach in das using rein.
für die Files die es dann später benötigen.
Vielen Dank für eure Hilfe.