Laden...

const char bei dll-Aufruf in c#?

Erstellt von Floris24 vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.256 Views
F
Floris24 Themenstarter:in
4 Beiträge seit 2006
vor 18 Jahren
const char bei dll-Aufruf in c#?

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!

178 Beiträge seit 2006
vor 18 Jahren

Moin,

ein string ist kein **char **...

Wenn Du char erwartest musst Du auch einen char übergeben...

Enjoy

Christian Arnold

6.862 Beiträge seit 2003
vor 18 Jahren

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.

178 Beiträge seit 2006
vor 18 Jahren

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

F
Floris24 Themenstarter:in
4 Beiträge seit 2006
vor 18 Jahren

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!

6.862 Beiträge seit 2003
vor 18 Jahren

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.

S
8.746 Beiträge seit 2005
vor 18 Jahren

Aus const char* wird im DLLImport ein string.