东软医保接口C++调用时崩溃,调了好几天了求大神帮忙看看
本帖最后由 VisualEleven 于 2013-03-18 09:43:06 编辑
#include "iostream.h"
#include "windows.h"
void main()
{
HINSTANCE hInst;
char *DataBuffer= new char[1024];
char *procid= new char[1024];
char *indata= new char[1024];
char *outdata= new char[1024];
/*int *AppCode= new int[1024];*/
int AppCode;
hInst = LoadLibrary("SiInterface.dll");
typedef int (WINAPI*InitDLL1)(char *&);
typedef int (WINAPI*EditUserInfo1)(char *,char *,char *&,int &,char *&);
InitDLL1 InitDLL = (InitDLL1)GetProcAddress(hInst,"InitDLL");
EditUserInfo1 EditUserInfo = (EditUserInfo1)GetProcAddress(hInst,"EditUserInfo");
if (InitDLL==NULL)
{
cout<<"获取函数InitDLL地址失败!"<<endl;
return;
}
else
{
cout<<"获取函数InitDLL地址成功!"<<endl;
}
if (EditUserInfo==NULL)
{
cout<<"获取函数EditUserInfo地址失败!"<<endl;
return;
}
else
{
cout<<"获取函数EditUserInfo地址成功!"<<endl;
}
if (!InitDLL(DataBuffer))
{
cout<<"动态库初始化成功!"<<endl;
}
else
{
cout<<"动态库初始化失败!"<<endl;
}
procid = "1001";
indata = "1211|dfds|3423|322234|33234|423432|";
//执行到这里都没问题,但执行EditUserInfo时就出现崩溃错误
//文档原型是int (char *procid,char *indata,char *outdata,int *AppCode,char *DataBuffer)
if (!EditUserInfo(procid,indata,outdata,AppCode,DataBuffer))
{
cout<<"执行EditUserInfo成功!"<<endl;
}
else
{
cout<<"执行失败!提示信息:<<DataBuffer<<endl;
}
FreeLibrary(hInst);
}
[解决办法]
if (!EditUserInfo(procid,indata,outdata,&AppCode,DataBuffer))
[解决办法]
typedef int (WINAPI*EditUserInfo1)(char *,char *,char *&,int &,char *&);
if (!EditUserInfo(procid,indata,outdata,AppCode,DataBuffer))
你觉得对应起来了么? *&有问题啊
&outdata &DataBuffer
[解决办法]
将指向常量区的指针传递给你的接口函数,正确吗?
[解决办法]
procid = "1001";
indata = "1211
------解决方案--------------------
dfds
[解决办法]
3423
[解决办法]
322234
[解决办法]
33234
[解决办法]
423432
[解决办法]
";
改成这样
strcpy(procid,"1001");
strcpy(indata,"1211
[解决办法]
dfds
[解决办法]
3423
[解决办法]
322234
[解决办法]
33234
[解决办法]
423432
[解决办法]
";);
看来应该是返回函数的内存空间分配的问题?
就算是函数内部分配空间也不会出现崩溃,最多是内存泄露。
[解决办法]
typedef int (WINAPI*EditUserInfo1)(char *,char *,char *&,int &,char *&);