Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 12:27

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C Dll call. IntPtr to string marshal

Discussion on C Dll call. IntPtr to string marshal within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
C Dll call. IntPtr to string marshal

Ich bekomme von meiner dll einen string zurück der so aussehen kann:

54738cru488vuwevu8null7943n50m8j934cm3u53n45u34nmu vnull

Die dll returned einen char*.

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

PS: Ich werde kein unsafe verwenden
YatoDev is offline  
Old 08/30/2015, 12:18   #2
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
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
warfley is offline  
Old 08/30/2015, 14:09   #3
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
welche methoden für ein array?
YatoDev is offline  
Old 08/30/2015, 21:00   #4
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
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
warfley is offline  
Old 08/30/2015, 23:05   #5
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Hatte es mit Marshal.Copy gelöst danke

Dein ansatz hätte auch funktioniert. byte ist genauso groß wie char in c aber .Net char ist doppelt so groß wie der c char!!!!
YatoDev is offline  
Old 08/31/2015, 00:44   #6
 
Logtetsch's Avatar
 
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
Quote:
Originally Posted by »FlutterShy™ View Post
Hatte es mit Marshal.Copy gelöst danke

Dein ansatz hätte auch funktioniert. byte ist genauso groß wie char in c aber .Net char ist doppelt so groß wie der c char!!!!
Liegt einfach daran, dass das .NET Unicode verwendet.
Vor einigen Tagen hatte ich das gleiche Problem. Für die, die es interessiert:
Logtetsch is offline  
Reply


Similar Threads Similar Threads
[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
QUEST LUA_ERROR: ATTEMPT TO CALL A STRING VALUE
01/28/2013 - Metin2 Private Server - 10 Replies
Was bedeutet das? was bedeutet das?
[Visual Basic] [Problem] String auslesen/String zufällig wählen
05/06/2012 - General Coding - 4 Replies
Code: #include <GUIConstants.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Name Generator", 236, 299, 815, 246) $Input1 = GUICtrlCreateInput("Username", 24, 72, 185, 21) $Input2 = GUICtrlCreateInput("Username", 24, 104, 185, 21) $Input3 = GUICtrlCreateInput("Username", 24, 136, 185, 21) $Input4 = GUICtrlCreateInput("Username", 24, 168, 185, 21) $Input5 = GUICtrlCreateInput("Username", 24, 200, 185, 21)



All times are GMT +1. The time now is 12:29.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.