den char* kann ich dank compiler in meinem code als IntPtr marshallen.
[DllImport("Beispiel.dll")]
public static extern IntPtr beispiel(int beispiel);
Das funktioniert auch so weit.
um den string hinter dem pointer zu bekommen wollte ich jetzt Marshal.PtrToStringAnsi benutzen.
Da kommt es dann auch schon zu meinem problem.
Der return string der dll enthält immer 1 !!! null zeichen. Marshal.PtrToStringAnsi gibt aber alle zeichen bis zum ersten null zeichen zurück.
Also wie bekomme ich jetzt meinen string oder wie kann ich die größe des strings auf den gezeigt wird bekommen um dann die überladung von Marshal.PtrToStringAnsi(IntPtr, int) zu nutzen
Ein #00 darf nicht in einem String enthalten sein, da, sowohl c, als auch c# oder auch Java Strings mit Null terminieren. Für alles weitere solltest du einen Byte Array nehmen.
Den Konflikt hast du, da in c ein char* sowohl ein dynamisches Byte Array als auch ein String sein kann (C kennt keinen separaten datentyp für Byte) und du musst eben entsprechende Methoden verwenden, je nach dem ob es sich um einen String oder ein Array handelt
Keine Ahnung, ich habe absolut keine Ahnung von Methoden in C# um einen IntPtr in Array oder anders rum zu converten. Mal ein ganz naiver Ansatz von mir bei dem ich mir denke dass es funktionieren könnte:
Code:
[DllImport("Beispiel.dll")]
public static extern Byte[] beispiel(int beispiel);
Denn zumindest im Unsafen code funktioniert das Casten von Pointern in Arrays problemlos
[SYSERR]LUA_ERROR: attempt to call a string value 12/01/2013 - Metin2 Private Server - 3 Replies Hallo liebe Community,
ich habe hier ein Problem mit einer Quest.
Wenn ich eines der Items, die in der Quest als "Starter" (xxx.use) angegeben sind, benutze, erscheint in der SYSERR folgender Fehler:SYSERR: Dec 1 14:34:26 :: RunState: LUA_ERROR: attempt to call a string value
SYSERR: Dec 1 14:34:26 :: WriteRunningStateToSyserr: LUA_ERROR: quest skill_book_reading_test.start click
Wer kann helfen?
MfG