Hallo,
will mit c# eine funktion über einen dll import aufrufen.
in dieser funktion gibt es eine const char far *xy.
wenn ich es als string übergeben möchte bringt er einen typenfehler.
mir wurde schon gesagt, dass es mit marshals oder stringbuilder irgendwie geht, aber damit bin ich auch nicht weitergekommen.
danke für eure beiträge.
EDIT(Talla):Ein Fragezeichen reicht auch!
Moin,
ein string ist kein **char **...
Wenn Du char erwartest musst Du auch einen char übergeben...
Enjoy
Christian Arnold
Nein, das ist nen Char Pointer, sprich die Anfangsadresse auf nen Char Array, was in C# dann eher nem String bzw. StringBuilder entspricht, aber so genau weiß ich des auch net alles mitm InterOp.
Baka wa shinanakya naoranai.
Mein XING Profil.
Achso, jetzt verstehe was Du meinst.
Du brauchst einen Managed Datentyp, z.B.
[DllImport("c_language.dll", EntryPoint="my_C_function")]
public unsafe static extern RetvalFlag myImportedCFunction(double x, int
y, CalcFlag iflag, double* ptrD, StringBuilder sberr);
private StringBuilder sberr = new StringBuilder("empty string", 2*256);
Enjoy
Christian Arnold
Die Funktion in c++:
void FAR PASCAL cunit(unsigned int handle,
const char far *name);
hab ich in c# nach dll import:
public static extern void cunit(uint handle, stringbuilder name);
bevor ich die funktion in c# aufrufe, geb ich der variablen einen wert:
stringbuilder name = new stringbuilder("das_ist_der_name");
aber es funktioniert nicht, was mach ich falsch?
Danke!
Wozu hast du eigentlich das FAR drin? Ist doch aufn PC so gut wie bedeutungslos oder?
Des mitm const könnte nen Problem sein, weil das heißt doch das du den Wert des Parameters nicht ändern darfst oder? Genau das verbietet dir in .Net aber keiner!
Baka wa shinanakya naoranai.
Mein XING Profil.