0

C# から呼び出す必要があるサード パーティのアンマネージ C++ dll があります。C++ 関数は char* を返します。これを C# でマネージド文字列に変換する方法を見つけました。しかし、メモリの割り当てを解除する必要があるかどうかはわかりません。次のコードは、Marshal.FreeHGlobal(p) が「The handle is invalid.」をスローすることを除いて機能します。では、メモリの割り当てを解除する必要がありますか? もしそうなら、どのように?

[DllImport("abc.dll", EntryPoint = "?GetVersion@ABC@@QEAAPEADXZ", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
private static extern unsafe char* GetVersionRaw();


public static unsafe string GetVersion()
{
    char* x = Abc.GetVersionRaw(); // call the function in the unmanaged DLL
    IntPtr p = new IntPtr(x);
    string s = Marshal.PtrToStringAnsi(p);
    Marshal.FreeHGlobal(p);
    return s;
}
4

1 に答える 1