3

我有一个用 C++ 编写的 DLL。这个DLL的一个函数就像下面的代码:

C++ 代码:

     char _H *GetPalette() {

            -------Functions body

            -------Functions body

            return pPaletteString;

      }

现在我想从 C# 代码中的 GetPalette() 函数中获取托盘字符串。

我如何从该函数中获取字符串?我已经在 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 函数中获取字符串值?

谢谢

沙赫里亚尔

4

2 回答 2

1

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

于 2011-05-02T10:16:01.097 回答
1

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

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

而不是简单地从您的 C# 代码中调用它。

string palette = GetPalette();

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

于 2011-05-02T15:01:54.083 回答