hur.cn - 华软网

 热门搜索

PB调用C++的DLL问题

  作者:未知    来源:网络    更新时间:2018/10/12
列位大哥:
    我C++(win32)编写了一DLL给PB调用,
    在PB6.5下完全正常
    在PB9和PB10下各种方法都试过,都不行(注释中的就是试过的方法),出现以下毛病:
Application terminated.
Error:Specified argument type differs from required argument type at runtime in DLL function getpara
(invalid stack pointer on return from function call)at line 18 in open event of object car


    我的代码以下,请列位大哥指点一下:

//Function long GetPara(ref blob sdbname,ref blob sdbuser,ref blob spwd,ref blob scompanyname,ref blob scompanycode) LIBRARY "cuser.dll" alias for "getpara;ansi"
//Function long GetParaString(ref blob sdbname,ref blob sdbuser,ref blob spwd,ref blob scompanyname,ref blob scompanycode) LIBRARY "cuser.dll" alias for "getparastring;ansi"

Function long GetPara(ref blob sdbname,ref blob sdbuser,ref blob spwd,ref blob scompanyname,ref blob scompanycode) LIBRARY "cuser.dll"
Function long GetParaString(ref blob sdbname,ref blob sdbuser,ref blob spwd,ref blob scompanyname,ref blob scompanycode) LIBRARY "cuser.dll"

blob sdbname
blob sdbuser
blob spwd
blob scompanyname
blob scompanycode
sdbname=blob(space(11))
sdbuser=blob(space(11))
spwd=blob(space(21))
scompanyname=blob(space(41))
scompanycode=blob(space(6))

int i;
i=GetPara(sdbname,sdbuser,spwd,scompanyname,scompanycode) <--这一行犯错
i=GetParaString(sdbname,sdbuser,spwd,scompanyname,scompanycode) <--这一行也犯错

也试过这样(都不行):

//Function long GetPara(ref string sdbname,ref string sdbuser,ref string spwd,ref string scompanyname,ref string scompanycode) LIBRARY "cuser.dll" alias for "getpara;ansi"
//Function long GetParaString(ref string sdbname,ref string sdbuser,ref string spwd,ref string scompanyname,ref string scompanycode) LIBRARY "cuser.dll" alias for "getparastring;ansi"

Function long GetPara(ref string sdbname,ref string sdbuser,ref string spwd,ref string scompanyname,ref string scompanycode) LIBRARY "cuser.dll"
Function long GetParaString(ref string sdbname,ref string sdbuser,ref string spwd,ref string scompanyname,ref string scompanycode) LIBRARY "cuser.dll"

string sdbname
string sdbuser
string spwd
string scompanyname
string scompanycode
sdbname=string(space(11))
sdbuser=string(space(11))
spwd=string(space(21))
scompanyname=string(space(41))
scompanycode=string(space(6))

int i;
i=GetPara(sdbname,sdbuser,spwd,scompanyname,scompanycode) <--这一行犯错
i=GetParaString(sdbname,sdbuser,spwd,scompanyname,scompanycode) <--这一行也犯错



C++编写的DLL其中的函数以下:

struct csystemfile{
char sdbname[11];
char sdbuser[11];
char spwd[21];
char scompanycode[6];
char scompanyname[41];
};

//extern "C" __declspec(dllexport) int PASCAL GetPara(char *sdbname,char *sdbuser,char *spwd,char *scompanyname,char *scompanycode)
extern "C" __declspec(dllexport) int  GetPara(char *sdbname,char *sdbuser,char *spwd,char *scompanyname,char *scompanycode)
{
MessageBox(0,"进入调用","起头调用",0);
MessageBox(0,"措置惩罚之前","传入的内容",0);

MessageBox(0,sdbname,sdbuser,0);
MessageBox(0,spwd,scompanyname,0);
MessageBox(0,scompanycode,"finish",0);

 
CSysPara csp;
csp.GetPara(); //自定义的一个类
strcpy(sdbname,csystemfile_stru.sdbname);
strcpy(sdbuser,csystemfile_stru.sdbuser);
strcpy(spwd,csystemfile_stru.spwd);
strcpy(scompanyname,csystemfile_stru.scompanyname);
strcpy(scompanycode,csystemfile_stru.scompanycode);

MessageBox(0,"措置惩罚之后","措置惩罚结果",0);
MessageBox(0,sdbname,sdbuser,0);
MessageBox(0,spwd,scompanyname,0);
MessageBox(0,scompanycode,"finish",0);

MessageBox(0,"措置惩罚之后","准备传出",0);

return 0;
}

//extern "C" __declspec(dllexport) int PASCAL GetParaString(string sdbname,string sdbuser,string spwd,string scompanyname,string scompanycode)

extern "C" __declspec(dllexport) int  GetParaString(string sdbname,string sdbuser,string spwd,string scompanyname,string scompanycode)
{

CSysPara csp;
csp.GetPara();

CSysPara csp;
csp.GetPara();
sdbname=csystemfile_stru.sdbname;
sdbuser=csystemfile_stru.sdbuser;
spwd=csystemfile_stru.spwd;
scompanyname=csystemfile_stru.scompanyname;
scompanycode=csystemfile_stru.scompanycode;

return 0;

}


------华软网友回答------
加个  __stdcall 试一下,可能是dll压栈顺序的问题
------华软网友回复------
照旧不行:
犯错信息变为:
Application terminated.
Error:Error calling external function GetPara at line 12 in open event of object car
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。