C#从c ++函数中获取返回char指针的字符串/字符值

时间:2011-05-02 10:13:10

标签: c# c++ marshalling char-pointer

我有一个用C ++编写的DLL。此DLL的功能类似于以下代码:

C ++代码:

     char _H *GetPalette() {

            -------Functions body

            -------Functions body

            return pPaletteString;

      }

现在我想从C#代码中的GetPalette()函数中获取Pallet String。

我怎么能从该函数中获取字符串? 我在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);

此代码无法正常运行。 有些人可以帮助我,我怎样才能从我的C ++ DLL函数中获取字符串值?

由于

的Shahriar

2 个答案:

答案 0 :(得分:1)

你告诉C#调用约定是__stdcall但是没有证据表明函数本身有__stdcall标记。此外,char*可以是UTF-8。

答案 1 :(得分:1)

您可以使用字符串返回类型在C#代码中定义C ++函数。

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

而不是简单地在C#代码中调用它。

string palette = GetPalette();

DllImport属性中,您可能需要设置正确的调用约定CallingConvention和字符编码CharSet