Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory leaks 调用MAPIUninitialize api后应用程序崩溃一次_Memory Leaks_Crash_Exchange Server_Mapi - Fatal编程技术网

Memory leaks 调用MAPIUninitialize api后应用程序崩溃一次

Memory leaks 调用MAPIUninitialize api后应用程序崩溃一次,memory-leaks,crash,exchange-server,mapi,Memory Leaks,Crash,Exchange Server,Mapi,所以,我一直在使用MAPI API。因为每当我调用MAPIUninitialize api时,我的应用程序就会崩溃。在进一步调试时,我发现,IMAPISession::OpenMsgStore是崩溃的原因,每当在程序运行时执行OpenMsgStore函数时,我的应用程序都会在触发MAPIUninitialize后崩溃。这类似于下面提到的本线程中的讨论,其中soln不可用 我已经检查了我的程序是否存在内存泄漏,我确信没有内存泄漏,而且,如果我对特定的api进行注释,我的程序不会崩溃,我不理解崩溃

所以,我一直在使用MAPI API。因为每当我调用MAPIUninitialize api时,我的应用程序就会崩溃。在进一步调试时,我发现,IMAPISession::OpenMsgStore是崩溃的原因,每当在程序运行时执行OpenMsgStore函数时,我的应用程序都会在触发MAPIUninitialize后崩溃。这类似于下面提到的本线程中的讨论,其中soln不可用


我已经检查了我的程序是否存在内存泄漏,我确信没有内存泄漏,而且,如果我对特定的api进行注释,我的程序不会崩溃,我不理解崩溃的原因。我已经尝试了所有可能的选择。有人能帮上忙吗?

这很可能意味着您仍然有活动的MAPI对象。也可能是MAPIInitialize/MAPIUninitialize的顺序太快,并且在尝试关闭公用Office运行时时时,它仍在(异步)初始化


此外,并非所有的存储都是平等创建的-IMAP4可能是最差的。

不清楚在何处以及何时使用这些方法。它是次线程吗

无论如何,MSDN声明如下:

在使用任何MAPI对象之前,客户端还必须在每个线程上调用MAPIInitialize,并在使用完成后调用MAPIUninitialize。即使要使用的对象是从外部源传递给线程的,也应该进行这些调用。MAPIInitialize和MAPIUninitialize可以从Win32 DllMain函数内以外的任何位置调用,该函数在初始化和终止进程和线程时,或在调用LoadLibrary和FreeLibrary函数时由系统调用


我建议您使用源代码-您可以在调试器下运行它,看看问题是否仍然可以重现。

谢谢您的精彩建议。我已经修复了这个问题,我的应用程序实际上调用了GalangC++中的MAPI API定义。因此,每个定义为DLL函数的mapi api都有不同的线程ID,当我使用runtime.LockOSThread()/runtime.UnlockOSThread()将DLL函数调用绑定到同一线程时,它开始工作,不再崩溃


Ref:

Hi Dmitry,感谢您的回复,正如yu所建议的,我尝试在触发MAPIUninitialize调用之前添加1分钟睡眠,但它仍然崩溃,所以这不是原因,也不是因为live mapi对象,正如我前面所说,我的程序崩溃只是因为这个api,如果它被注释,它不会崩溃。因此,如果存在句柄/内存泄漏的可能性,那可能只是因为该api,我非常确定,我已经释放了msgstore的句柄,我使用openmsgstore api使用release()函数获得了该句柄,但它似乎仍然崩溃。还有其他建议吗?如果不看源代码,真的很难说。