今天在提问里问了几个大牛一个问题,大牛们说得很深,我的资质有很浅,没办法,我只能自己琢磨了啊,下面是正题
//////////////////////////////////////////////////////////////////////////////////////////
7C9211FF test byte ptr [esi+10h],10h
7C921203 je 7C92FEF6
7C921209 pop esi
7C92120A leave
7C92120B ret 4
7C92120E int 3 //这里是断点,
7C92120F ret
7C921210 mov edi,edi
7C921212 int 3
7C921213 ret
7C921214 mov edi,edi
7C921216 mov eax,dword ptr [esp+4]
7C92121A int 3
7C92121B ret 4
7C92121E mov eax,dword ptr fs:[00000018h]
7C921224 ret
7C921225 push edi
7C921226 mov edi,dword ptr [esp+0Ch]
7C92122A mov edx,dword ptr [esp+8]
7C92122E mov dword ptr [edx],0
7C921234 mov dword ptr [edx+4],edi
以上是发汇编代码,当时不知道咋回事,大牛们建议用TRY,但是试了很多次,都失败了(其实是我不会用try所致),无赖自己琢磨设断点,发现是自己调用的DLL出问题了,真奇怪,与使用vs的命令提示符去检查DLL,结果发现是对的,一切正常,而后打开该函数源文件,发现如下代码:
//
// MATLAB Compiler: 4.0 (R14)
// Date: Mon Aug 30 14:16:33 2010
// Arguments: "-B" "macro_default" "-W" "cpplib:libMyAdd" "-T" "link:lib"
// "filtertemp"
//
#ifndef __libmyadd_h
#define __libmyadd_h 1
#if defined(__cplusplus) && !defined(mclmcr_h) && defined(__linux__)
# pragma implementation "mclmcr.h"
#endif
#include "mclmcr.h"
#include "mclcppclass.h"
#ifdef __cplusplus
extern "C" {
#endif
extern bool libMyAddInitializeWithHandlers(mclOutputHandlerFcn error_handler,
mclOutputHandlerFcn print_handler);
extern bool libMyAddInitialize();
extern void libMyAddTerminate();
extern void mlxFiltertemp(int nlhs, mxArray *plhs[],
int nrhs, mxArray *prhs[]);
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
extern void filtertemp(int nargout, mwArray& y
, const mwArray& AD0, const mwArray& AD1);
#endif
#endif
///////////////////////////////////////////////////
怎么会这样啊??仔细想想才发现:libmyaddinitialize()是编译成c风格的了(加—下划线的),而我的编译器是vs,c++风格的(加奇怪符号的,),这就对了,将其注释不要,果然对了,,,,,但是很不辛,因为这个函数对于我调用的DLL进行了一些初始化,在我把它注释后发现,出现了内存不能读的现象,真的是两为其难啊,.....这是个棘手的问题。