Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
const char bei dll-Aufruf in c#?
Floris24
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

const char bei dll-Aufruf in c#?

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
trinkjoghurt
myCSharp.de - Member

Avatar #avatar-1807.jpg


Dabei seit:
Beiträge: 178
Herkunft: Frankfurt / Main

beantworten | zitieren | melden

Moin,

ein string ist kein char ...

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

Christian Arnold
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
trinkjoghurt
myCSharp.de - Member

Avatar #avatar-1807.jpg


Dabei seit:
Beiträge: 178
Herkunft: Frankfurt / Main

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Floris24
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 6.862
Herkunft: Esslingen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8.746
Herkunft: Berlin

beantworten | zitieren | melden

Aus const char* wird im DLLImport ein string.
private Nachricht | Beiträge des Benutzers