+ -
当前位置:首页 → 问答吧 → delphi调用动态库出错

delphi调用动态库出错

时间:2011-08-29

来源:互联网

还是前几天出现的问题,DELPHI调用C++Builder写的动态库出错,跟踪到动态库时,发现实际delphi实际经值已经传了进来,但是我动态库内部定义的数据和结构体都是E2208 cannot access an inactive scope的错误,到底是动态库问题还是Delphi有问题,该怎么避免这样的问题,谢谢

作者: tianlu123   发布时间: 2011-08-29

请大家帮忙回答啊

作者: tianlu123   发布时间: 2011-08-29

有点怀疑是不是“调用约定”写的不对啊!你改改“调用约定”看否可以解决问题!

作者: jayqiang   发布时间: 2011-08-29

步兵,反对骑兵

作者: sonicer   发布时间: 2011-08-29

我们这个代码大家看看:
DLL部分
C/C++ code
int WINAPI JBC7K2_Comsume_Server(char *server_ip, char *ip, int port)
{
    char s[128] = "";
    _netpack_ *netpk = (_netpack_ *)s;
    //_IpConfig_ *ipc = (_IpConfig_ *)netpk->szbuz;
    *(DWORD*)netpk->szbuz = inet_addr(server_ip);
    netpk->cmd = CMD_SERVERIP;
    JBC7K2_CloseSocket();
    JBC7K2_OpenSocket();
    return CmdSend(netpk, 4, 4, ip, port);
}


delphi调用
Delphi(Pascal) code
codeprocedure TForm1.ServerIP_SetButtonClick(Sender: TObject);
var
  ret: integer;
  serverIP: string;
begin
  serverIp := Trim(Edit_ip.Text);
  ret := JBC7K2_Comsume_Server(Pchar(serverIp), pchar(g_devip), g_devport);
  if (ret = 0) then
    StatusBar.Panels[0].Text := '设置服务IP命令执行成功!'
  else
    StatusBar.Panels[0].Text := '设置服务IP命令执行失败!';

end;



大哥们,谢谢了

作者: tianlu123   发布时间: 2011-08-29

声明部分
Delphi(Pascal) code
function JBC7K2_Comsume_Server(server_ip: pchar; ip: pchar; port: integer): integer; stdcall; external 'Dll\jbc7200.dll';

我用动态库跟踪了,值都传不下去

作者: tianlu123   发布时间: 2011-08-29

因为现在我用C++BUILDER调用没有遇到出现过类似的情况,用BCB写的测试程序都是OK的,就DELPHI调用一直出错

作者: tianlu123   发布时间: 2011-08-29

你在BCB里调用时也是用的string?你要不要在delphi用pchar类型的变量,分配好然后再传入试一下?

作者: sonicer   发布时间: 2011-08-29

那样的也做过测试,好像也是不行

作者: tianlu123   发布时间: 2011-08-29

热门下载

更多