我有一个C ++ DLL库。我正在使用.NET Framework 4.0的C#项目测试DLL。在C ++ DLL中我使用了一些库,比如POCO,Boost,ODBC,SQLite,SOCI ......
在我决定用POCO替换SOCI接口以减少库中加载的库数量之前,它做得很好。
我编译了PocoData,PocoDataODBC,并将它们与标题一起添加到项目中。项目编译好,创建DLL,DLL通过 Dependency Walker 测试。
但是当使用.NET项目中的DLL时会发生一些奇怪的事情。当执行包含Poco::Data
部分的DLL方法以连接数据库时,应用程序才会关闭。
没有抛出异常或错误。甚至没有“应用程序刚刚从Windows崩溃”。它只是停止运行,Visual Studio恢复正常,就像它正确结束一样。
我隔离了错误,并且使用任何使用或在PocoData库内调用来执行此错误。我可以使用该库,直到它尝试使用任何调用此方法的方法。例如:
Session session("ODBC", conn);
甚至仅此一点:
Poco::Data::RecordSet rs();
因此,每当C#调用一个包含DLL中Poco::Data
的任何内容的方法时,它都会失败。
知道会发生什么事吗?
当应用程序出错时,Windows事件会记录一些内容,我不知道它是否相关。它引发了两个事件,第一个是相同值(奇怪)之间的系统小时变化,类型:Kernel-General
。
第二个(大约10秒后)是Service Control Manager
级Information
:
服务Windows错误报告服务在运行状态下进入。