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);

このコードは正しく機能しません。いくつかのボディplzは私を助けることができます、どうすれば私のC ++ DLL関数から文字列値を取得できますか?

ありがとう

Shahriar

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を設定する必要がある場合がありますCallingConventionCharSet

于 2011-05-02T15:01:54.083 に答える