char * в строку в C # - PullRequest
       3

char * в строку в C #

6 голосов
/ 28 января 2012

Я вызываю функцию из собственной DLL, которая возвращает указатель char*, как я могу преобразовать возвращенный указатель в строку? Я попробовал:

char* c = function();
string s = new string(c);

Но он только что возвратил странный китайский символ, который не подходит для c.

Ответы [ 4 ]

13 голосов
/ 28 января 2012

Возможно, нативная DLL фактически возвращает строку ANSI вместо строки Unicode. В этом случае позвоните Marshal.PtrToStringAnsi:

using System.Runtime.InteropServices;
...
string s = Marshal.PtrToStringAnsi((IntPtr)c);
2 голосов
/ 28 января 2012

Обновите ваше объявление P / Invoke вашей внешней функции следующим образом:

[DllImport ( "MyDll.dll", CharSet = CharSet.Ansi, EntryPoint = "Func" )]
[return : MarshalAs( UnmanagedType.LPStr )]
string Func ( ... );

Таким образом, вам не придется выполнять дополнительную работу после получения указателя.

1 голос
/ 28 января 2012

Ваш пример не совсем понятен, но ваш комментарий предполагает, что вы звоните в c ++ dll из c #.Вам нужно вернуть bstr, а не char * или строку.

Я бы начал с этого вопроса / ответа, который я использовал, когда мне нужно было выполнить эту операцию:

Как вернуть текст из собственного кода (C ++)

0 голосов
/ 16 июня 2018
public static void Main(string[] args)
        {
            var charArray = new[] {'t', 'e', 's', 't'};
            fixed (char* charPointer = charArray)
            {
                var charString = new string(charPointer);
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...