【发布时间】:2011-01-30 19:56:59
【问题描述】:
我有非托管代码:
...
typedef struct foo
{
int a;
bool b
int c;
} FOO,*LPFOO;
....
__declspec(dllexport) FOO __stdcall GetFoo()
{
FOO f;
<some work>
return f;
}
....
我已经为 GetFoo 函数声明了 C# 原型:
[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函数分配的非托管内存? -
对不起,我发错了。场外它没有任何参数。非托管 GetFoo 不分配任何内存对象
标签: c# marshalling unmanaged managed