关于DLL调用的问题

crazyrcd 2010-10-11 01:48:22
我用是PB10.5
调用的DLL是用delphi编的
其中一个函数function GetFaxStatusEx(HD: THandle; sServer: Pchar; buf: Pchar;Var IErr : integer; sError: Pchar): boolean;stdcall;
我在PB里面是这样定义的function boolean GetFaxStatusEx( ulong HD,ref string sServer,ref string buf,ref long IErr,ref string sError) Library "DLL.dll"

代码里面这样调用
string ls_server,ls_err,ls_buff
long i_err


ls_server = space(1024)
ls_buff = space(1024)
ls_err = space(1024)

ls_server = sle_ip.text
GetFaxStatusEx(0, ls_server, ls_buff, i_err, ls_err)
if i_err = 1100700 then
messagebox("系统提示","用户名或密码错误!请先登录")
else
messagebox("状态信息",ls_buff)
end if
现在调用不成功,ls_err返回一串乱码,其他什么都没有
...全文
85 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pb8 2010-10-11
  • 打赏
  • 举报
回复
呵呵,把那个dll发给我试一下,10308237@qq.com
crazyrcd 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pb8 的回复:]

引用 6 楼 crazyrcd 的回复:
为什么delphi和C都调用的好好的,偏偏到了PB就不行了


习惯了就好了,语言的挑剔性不一样,所以对于代码的严谨也更重要;
你可以把你delphi的代码再改得精简一些试试,我们经常用delphi写的dll,以前也出现一些问题,后来多注意了也就好了~~
[/Quote]
pb不是先转成C的嘛,既然C都能用,为什么PB就不能了
这个DLL也是那个软件的供应商给我的,难道还要找他们改下,悲剧啊
pb8 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 crazyrcd 的回复:]
为什么delphi和C都调用的好好的,偏偏到了PB就不行了
[/Quote]

习惯了就好了,语言的挑剔性不一样,所以对于代码的严谨也更重要;
你可以把你delphi的代码再改得精简一些试试,我们经常用delphi写的dll,以前也出现一些问题,后来多注意了也就好了~~
crazyrcd 2010-10-11
  • 打赏
  • 举报
回复
为什么delphi和C都调用的好好的,偏偏到了PB就不行了
crazyrcd 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pb8 的回复:]

引用 3 楼 crazyrcd 的回复:
引用 2 楼 pb8 的回复:

function boolean GetFaxStatusEx( ulong HD,ref string sServer,ref string buf,ref long IErr,ref string sError) Library "DLL.dll" ALIAS FOR "GetFaxStatusEx;ansi"……
[/Quote]
error我随便赋了一个字符串,但是还是有错,内存出错
pb8 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 crazyrcd 的回复:]
引用 2 楼 pb8 的回复:

function boolean GetFaxStatusEx( ulong HD,ref string sServer,ref string buf,ref long IErr,ref string sError) Library "DLL.dll" ALIAS FOR "GetFaxStatusEx;ansi"

现在返回的错误不是乱码了
Acces……
[/Quote]

非法的内存地址访问,你的delphi代码可能不严谨,内存地址访问越界之类的,你不处理其他代码,直接赋值error后返回试试;
crazyrcd 2010-10-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pb8 的回复:]

function boolean GetFaxStatusEx( ulong HD,ref string sServer,ref string buf,ref long IErr,ref string sError) Library "DLL.dll" ALIAS FOR "GetFaxStatusEx;ansi"
[/Quote]
现在返回的错误不是乱码了
Access violation at address 029A4600 in module 'GetFaxStat.dll'. Read of address FFFFFFFA
内存冲突?这个又是为什么?
pb8 2010-10-11
  • 打赏
  • 举报
回复
function boolean GetFaxStatusEx( ulong HD,ref string sServer,ref string buf,ref long IErr,ref string sError) Library "DLL.dll" ALIAS FOR "GetFaxStatusEx;ansi"
crazyrcd 2010-10-11
  • 打赏
  • 举报
回复
char server[1024];
char buff[1024];
CString aa;
int* I;
char err[1024];
HINSTANCE hInst = LoadLibrary( "DLL.dll");
if(hInst)
{
typedef bool (WINAPI*_GetFaxStatusE)(int,char* ,char *,int*,char *);
_GetFaxStatusE GetFaxStatusE = NULL;
GetFaxStatusE = (_GetFaxStatusE)GetProcAddress(hInst, "GetFaxStatusEx");
if (GetFaxStatusE)
{
strcpy(server,"192.168.6.12");
//strcpy(buff,"102412 3456789034567834567834567845678901234567890-234567891234567234567");
//strcpy(err,"102412 3456789034567834567834567845678901234567890-234567891234567234567");
//I=12;
GetFaxStatusE(0,server,buff,I,err);
aa.Format( "%s ",buff);
AfxMessageBox(aa);
}
}else{
AfxMessageBox( "找不到seekcrypt.dll文件。 ");
}
这个是C里面的,到了PB就不能实现调用,不知道错在哪里,希望好心人给点指导

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧