我有非託管代碼:編組BYVAL C-結構,在C#中返回值
...
typedef struct foo
{
int a;
bool b
int c;
} FOO,*LPFOO;
....
__declspec(dllexport) FOO __stdcall GetFoo()
{
FOO f;
<some work>
return f;
}
....
我已經宣佈C#原型的getFoo功能:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
private struct Foo
{
public int a;
public bool b
public int c;
};
[DllImport("foo.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
[return:MarshalAs(UnmanagedType.Struct)]
private static extern Foo GetFoo();
但是,當我從C#代碼中調用的getFoo我一直有MarshalDirectiveException-方法的類型簽名不兼容PInvoke。我應該如何聲明C#原型?
似乎非託管`GetFoo`功能不同時,其管理的定義需要採取任何參數一個整數參數。也許這是一個錯字?另外你如何打算釋放`GetFoo`函數分配的非託管內存? – 2011-01-30 20:09:22
對不起,我誤以爲是我的帖子。 offcource它沒有任何參數。非託管GetFoo不分配任何內存對象 – 2011-01-30 20:11:43