调用本机代码时引发ExecutionEngineeException

调用本机代码时引发ExecutionEngineeException,c,vb.net,pinvoke,executionengineexception,C,Vb.net,Pinvoke,Executionengineexception,我有一个由C库导出的函数,其签名如下: extern“C”BOOL Func() 该函数在VB.NET代码中声明如下: 作为布尔值的私有共享函数Func() 结束功能 问题是,当我从.NET代码调用函数时,会得到ExecutionEngineeException 假设在C代码中,BOOL的类型定义为int,那么声明是否应该不同?如果是这样,我应该如何声明这一点?作为Short或Int32?是否需要封送返回值?C函数不返回真布尔值,而是返回整数。你可能需要 编辑:另外,您应该将函数设置为静态。这

我有一个由C库导出的函数,其签名如下:

extern“C”BOOL Func()

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

作为布尔值的私有共享函数Func()

结束功能

问题是,当我从.NET代码调用函数时,会得到ExecutionEngineeException


假设在C代码中,
BOOL
的类型定义为
int
,那么声明是否应该不同?如果是这样,我应该如何声明这一点?作为
Short
Int32
?是否需要封送返回值?

C函数不返回真布尔值,而是返回整数。你可能需要


编辑:另外,您应该将函数设置为静态。

这是否意味着我需要这样做:将私有共享函数Func()设置为布尔值是的。但这不是你的问题,非托管代码正在破坏堆。嗨,Hans,当你说“未老化的代码正在破坏堆”时,你是在谈论托管堆吗?我能做些什么来避免这种情况?我应该在非托管代码中寻找什么?据我所知,它似乎没有做任何破坏性的事情,比如分配和销毁数组。事实证明,修复方法是按照我在第一篇评论中的方式对其进行封送。非常好。我想可能是这样:)