所以我使用了一些导致我的程序崩溃的本机代码(只能访问DLL;没有源代码)。基本上,我尝试连接到最初连接良好的服务器。 API提供了一个连接对象,用作程序员的抽象。
首先,我将两个(编组的)回调函数传递回连接对象。一个是事件回调,另一个是错误回叫。然后,我使用"连接"用于启动连接的功能。这将创建一个内部线程来处理连接。它调用事件回调并通知我它没有任何问题。
连接失败时会发生问题(超时后会发生),错误CB函数被调用,运行完成后,我得到(0xc0000005)'访问冲突'错误。我假设它是引起问题的内部线程,因为API中任何创建内部线程的本机C函数都会导致访问冲突。我怎么处理这个?我也使用托管C ++,如果这有帮助的话。谢谢!
答案 0 :(得分:0)
好吧,如果有人想知道,它与GC有关。通过固定本地C代码和托管代码通过GCAlloc和GCHandleType使用的变量,并使用extern" C"调用本机C代码,我设法修复了发生的大多数错误。如果引用API代码的所有代码都将在托管代码之外引用,那么它也会更容易 - 例如,使用#pragma unmanaged的源文件。
此外,在制作处理大量非托管代码的GUI时,MFC可能是比Windows窗体更容易的选择......除非您希望GUI执行更复杂的操作:)