7

我的matlab c/c++ 共享库出现运行时问题。库导出并且应用程序被正确编译和链接。但是在运行时脚本似乎有很多错误。我的应用程序的控制台窗口(显示 matlab 输出)中没有显示错误。但是调试器在运行时显示了很多未捕获的异常。但是脚本似乎运行并且应用程序正确终止。

一些事情要知道:

  • 基于 Win8 Pro x64 构建
  • Visual Studio 2012(项目设置为VS 2010,安装正确)
  • Matlab R2012b(32Bit)(64Bit版本也安装了,不过这里没用,据我所知)
  • MCR R2012b win32/64 已安装
  • Matlab 中使用的编译器 Compiler 是VS2010 的一种(用GUI-compiler 编译)

好吧,这是我要导出到共享库的 m 文件:

% Create video input object. 
vid = videoinput('winvideo', 1, 'YUY2_320x240')

% Set video input object properties for this application.
set(vid,'TriggerRepeat',Inf);
vid.FrameGrabInterval = 3;

% Set value of a video source object property.
vid_src = getselectedsource(vid);
set(vid_src,'Tag','motion detection setup');
set(vid,'ReturnedColorSpace','rgb');

% Create a figure window.
figure; 
% wiener filter neighbourhood
wienerFilter = [5 5];
% Start acquiring frames.
start(vid)

% Calculate difference image and display it.
while(vid.FramesAcquired<=200) % Stop after 200 frames
    data = getdata(vid,2);

    first_img = wiener2(rgb2gray(data(:,:,:,1)), wienerFilter);
    second_img = wiener2(rgb2gray(data(:,:,:,2)), wienerFilter);

    bw_img = im2bw(first_img);

    diff_im = imabsdiff(first_img,second_img);

    subplot(1,3,1), imshow(first_img);
    subplot(1,3,2), imshow(second_img);
    subplot(1,3,3), imshow(diff_im);

end

stop(vid)

delete(vid)
close(gcf)

如果您的计算机上有网络摄像头,则脚本应该可以正常运行!

现在主要的 C++ 文件:

#include "stdafx.h"
#include "MatlabCompilerSample.h"

#pragma comment(lib, "MatlabCompilerSample.lib")

int _tmain(int argc, _TCHAR* argv[])
{
    /* Call the MCR and library initialization functions */
    if( !mclInitializeApplication(NULL,0) )
    {
        const char* message = mclGetLastErrorMessage();
        printf_s(message);
        fprintf(stderr, "Could not initialize the application.\n");
        exit(1);
    }

    if (!MatlabCompilerSampleInitialize())
    {
        fprintf(stderr,"Could not initialize the library.\n");
        exit(1);
    }

    /* Call the implementation function */
    WebcamSample();

    /* Call the library termination function */
    MatlabCompilerSampleTerminate();

    mclTerminateApplication();
    return 0;
}

到现在还好看吗?加载一堆 dll 后,混乱开始了。查看抛出的异常和废话:

'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\WinSxS\x86_microsoft.vc90.mfcloc_1fc8b3b9a1e18e3b_9.0.30729.6161_none_49768ef57548175e\MFC90DEU.DLL'. Module was built without symbols.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: std::runtime_error at memory location 0x003DF4A0.
SetThrowSegvLongjmpSEHFilter(): filter function installed
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003D6210.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003D5A4C.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003D6210.

好吧,这会持续一段时间,然后:

'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\profapi.dll'. Cannot find or open the PDB file.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x060EFD98.
The thread 0x2478 has exited with code 0 (0x0).
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DE000.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DD83C.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DE000.

那不是全部...

First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DD0B4.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DDEA0.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x061EF980.
The thread 0x282c has exited with code 0 (0x0).
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DE328.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DDB64.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DE328.

...

First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: xsd_binder::MalformedDocumentError at memory location 0x003DE1C8.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x061EFC14.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x060EFDEC.
The thread 0x32a4 has exited with code 0 (0x0).
The thread 0x350c has exited with code 0 (0x0).
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x060EFC1C.
The thread 0xfd8 has exited with code 0 (0x0).
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: boost::thread_interrupted at memory location 0x05FEFC7C.
The thread 0x2144 has exited with code 0 (0x0).
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\client\jvm.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winmm.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr71.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winmmbase.dll'. Cannot find or open the PDB file.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: std::runtime_error at memory location 0x0771F404.
SetThrowSegvLongjmpSEHFilter(): filter function installed
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\NapiNSP.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\pnrpnsp.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\nlaapi.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\mswsock.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dnsapi.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winrnr.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Program Files (x86)\Common Files\Microsoft Shared\Ink\tiptsf.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cfgmgr32.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\verify.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\java.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\hpi.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\zip.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\fontmanager.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\awt.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\apphelp.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\nativejmi.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\nativeservices.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\nativejava.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\net.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\sys\java\jre\win32\jre\bin\nio.dll'. Cannot find or open the PDB file.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: std::runtime_error at memory location 0x0771F284.
SetThrowSegvLongjmpSEHFilter(): filter function installed
First-chance exception at 0x76AB4B32 (KernelBase.dll) in MatlabCompilerCPPExample.exe: 0x000006BA: Der RPC-Server ist nicht verfügbar.
The thread 0x37b0 has exited with code 0 (0x0).
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: CryptoPP::AES_PHM_Decryption::InvalidCiphertextOrKey at memory location 0x0771C1B8.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: CryptoPP::AES_PHM_Decryption::InvalidCiphertextOrKey at memory location 0x0771C988.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x077189E7.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x0771B82C.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07717E57.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x0771ACA0.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\libmwbuiltins.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\mlint.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'C:\Windows\SysWOW64\version.dll'. Cannot find or open the PDB file.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07717E57.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x0771ACA0.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\libmwmathelem.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\libmwmathxps.dll'. Cannot find or open the PDB file.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: varflowFailedException at memory location 0x0771BCD7.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: varflowFailedException at memory location 0x0771BD82.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\hgbuiltins.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\nativemvm.dll'. Cannot find or open the PDB file.
'MatlabCompilerCPPExample.exe' (Win32): Loaded 'N:\Programme\MATLAB\2012b (32Bit)\bin\win32\nativehg.dll'. Cannot find or open the PDB file.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: CryptoPP::AES_PHM_Decryption::InvalidCiphertextOrKey at memory location 0x07716AC0.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07714C0F.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07717A5C.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: CryptoPP::AES_PHM_Decryption::InvalidCiphertextOrKey at memory location 0x07717628.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x0771367F.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedExceptionNoUCB at memory location 0x077137EC.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07715940.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x077162C7.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: tfFailedException at memory location 0x07719110.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: varflowFailedException at memory location 0x07719773.
First-chance exception at 0x76AB4B32 in MatlabCompilerCPPExample.exe: Microsoft C++ exception: varflowFailedException at memory location 0x077197EE.

整个文件有 6000 行...如果有必要我会发布它!毕竟它在这里停止了:

First-chance exception at 0x76AB4B32 (KernelBase.dll) in MatlabCompilerCPPExample.exe: 0xA1A01DB2 (parameters: 0x1FD09FE6, 0x1FD08200, 0x00000000).
The program '[3324] MatlabCompilerCPPExample.exe' has exited with code 0 (0x0).

我会很高兴每一个提示,提前谢谢!

4

1 回答 1

2

这些都是第一次机会例外,并不意味着有问题。我在以前的工作中经常看到它们,而 Matlab 倾向于产生很多异常,但这都不是真正的问题。

http://blogs.msdn.com/b/davidklinems/archive/2005/07/12/438061.aspx

第一次机会异常是否意味着我的代码存在问题?首次机会异常消息通常并不意味着代码中存在问题。对于优雅地处理异常的应用程序/组件,第一次机会异常消息让开发人员知道遇到并处理了异常情况。

于 2013-04-18T12:17:08.047 回答