我的问题是为什么下面描述的问题解决方案有效。 简介:我有一个小型的c ++服务器应用程序,它在c#中执行其业务逻辑。我将DllExport用于(反向)pinvoke。一切都是桃红色的,一切都很快,稳定,没有泄漏或任何问题。 C#由几个程序集组成(所有程序集都是4.7.2,本机为x64),但我仅将导出程序放在一个程序集中。
问题:开发的一部分使我从另一个程序集中调用了一个琐碎的实用程序公共静态函数,该程序仅包含具有单个静态类的单个文件,该类具有大约15个辅助函数和单个接口
public interface ISerializable
{
BinaryWriter serial(BinaryWriter w);
//ISerializable serial(BinaryReader w);//itself
}
当调试器命中该函数时,它立即引发空指针异常,而当我命中继续时,它将引发FatalExecutionEngineError。异常在函数调用之前发生,然后发生其他任何事情。当查看汇编调试器时,它发生在CALL指令上。再次,没有堆栈问题或任何不良情况。
我尝试过的事情: 由于对消除自己的错误抱有偏执,我创建了一个干净的调用pinvoke,在内部仅调用了一个简单的测试函数,而对同一类则什么也不做。 它立即崩溃了。 当我将此测试函数移至同一程序集中的新静态类时,它开始起作用。...
有效的方法:无奈之下,我将界面移到了一个单独的静态类上,一切开始正常工作。
很显然,这是一个货物崇拜代码,我想了解如何调试该问题。从理论上讲,dllexport / pinvoke如何导致此错误?有人看到过类似的东西吗?