2010-10-17 79 views
0

当我有一个由C库具有以下签名导出的函数:ExecutionEngineException抛出调用本机代码

extern "C" BOOL Func()

该函数声明在VB.NET代码:

<DllImport("mylib.dll", CallingConvention:=CallingConvention.Cdecl)>

Private Shared Function Func() As Boolean

End Function

问题是,当我从.NET代码调用函数时,我得到一个ExecutionEngineException。

鉴于BOOL在此C代码中的类型定义为int,该声明应该不同吗?如果是这样,我应该如何声明这一点?至于ShortInt32?我需要编组返回值吗?

回答

0

C函数不返回一个真正的布尔值,它返回一个整数。您可能需要marshall it propery

编辑:此外,你应该使你的功能是静态的。

+0

这是否意味着我需要这样做:Private Shared Function Func()As Boolean – 2010-10-17 04:07:23

+0

是的。但这不是你的问题,非托管代码正在破坏堆。 – 2010-10-17 10:15:31

+0

嗨汉斯,当你说'已损坏的代码正在销毁堆'时,你是在谈论托管堆?我能做些什么来避免这种情况?我应该在非托管代码中寻找什么?据我所知,它似乎没有做任何破坏性的事情,比如分配和销毁数组。 – 2010-10-17 17:30:06