C # получает значение строки / символов из функции c ++, которая возвращает указатель на символ - PullRequest
3 голосов
/ 02 мая 2011

У меня есть DLL, написанная на C ++.Функция этой DLL похожа на следующий код:

код C ++:

     char _H *GetPalette() {

            -------Functions body

            -------Functions body

            return pPaletteString;

      }

Теперь я хочу получить строку Pallet из этой функции GetPalette () в коде C #.

Как я могу получить строку из этой функции?Я пробовал это в коде C #.Но не удалось получить правильный результат.

Код C #:

    [DllImport("cl.dll", EntryPoint = "GetPalette@0", CallingConvention = CallingConvention.StdCall)]

    private static extern IntPtr libGetPalette();

    public IntPtr GetPalette()
    {
        return libGetPalette();
    }

Наконец-то я хочу получить такую ​​строку

            IntPtr result;
            result = imgProcess.GetPallet();

            string pallet;
            pallet = Marshal.PtrToStringAnsi(result);
            MessageBox.Show(pallet);

Этот код не работает должным образом.Может ли какой-нибудь body plz помочь мне, Как я могу получить строковое значение из моей функции C ++ DLL?

Спасибо

Shahriar

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Вы можете определить свою функцию C ++ в коде C # со строковым типом возврата.

[DllImport("cl.dll")]
private static extern string GetPalette();

А потом просто позвоните в коде C #.

string palette = GetPalette();

В атрибуте DllImport может потребоваться установить правильное соглашение о вызовах CallingConvention и кодировку символов CharSet

1 голос
/ 02 мая 2011

Вы сказали C #, что соглашение о вызовах __stdcall, но нет никаких свидетельств маркировки __stdcall на самой функции. Кроме того, char* может быть UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...