超级大富翁问题之一!!(50分)

  • 主题发起人 主题发起人 windthunder
  • 开始时间 开始时间
W

windthunder

Unregistered / Unconfirmed
GUEST, unregistred user!
现有两个库文件,A和B;<br>A中从一动态链接库调用一函数,在本库文件中使用通过;<br>但在B库中通过“A.函数名()”调用的方式却出现地址访问错误,<br>B库中已经加入了uses B,<br>我该如何解决!
 
如果調用動態鏈接庫, 要用external來調用的. Exp:<br>function funCName(str: String): Integer; stdcall;external &nbsp;'A.dll';<br><br>不知道我有沒有理解錯你的問題.
 
我用的就是external调用的,可是不行,<br>还有动态连接库是用C++编译的,参数设的分别是unsigned short和*char<br>我调用时用的是word和pchar,有问题吗?
 
不可能吧,把代码贴出来看看,看看Windows.pas单元里是如何调用DLL的,会对你有帮助的。
 
用 WideString
 
procedure Asis_GetErrorMsg(errCode : word ; errMsg: pchar);stdcall;external'function.dll';<br>implementation<br>{$R *.DFM}<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; ret: word;<br>&nbsp; mes: string;<br>&nbsp; &nbsp; p: pchar ;<br>begin<br>&nbsp; ret:= &nbsp;65289;<br>&nbsp; asis_geterrormsg(ret , p);<br>&nbsp; mes:=strpas(p);<br>&nbsp; if messagedlg(mes,mterror,[mbok],0)=mrok then exit;<br><br>end;<br>以上代码有问题吗?
 
procedure Asis_GetErrorMsg([red]var[/red] errCode : word ; errMsg: pchar);stdcall;external'function.dll';<br><br>要加上這個吧, 不然在 mes:=strpas(p); p是得不到value的.<br>要不就寫成function Asis_GetErrorMsg(errCode : word):PChar; stdcall;external'function.dll';<br>把想要的errMsg用 Asis_GetErrorMsg 返回值得到, 這樣就要修改function.dll了, 你試試.
 
alextsui建议值得考虑,非常感谢!但现在的具体情况是:<br>unit a;<br>.....<br>procedure Asis_GetErrorMsg(errCode : word ; errMsg: pchar);stdcall;external'function.dll';<br>......<br>implementation<br>{$R *.DFM}<br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; ret: word;<br>&nbsp; mes: string;<br>&nbsp; &nbsp; p: pchar ;<br>begin<br>&nbsp; ret:= &nbsp;65289;<br>&nbsp; asis_geterrormsg(ret , p);<br>&nbsp; mes:=strpas(p);///成功<br>==============================<br>unit b<br>.........<br>&nbsp; &nbsp; &nbsp;a.asis_geterrormsg(ret , p);//失败
 
從你給得程式上看沒有發現錯誤, 分析有幾點:<br><br>A. 我想知道你unit b 中的ret, p聲明了沒有?<br>B. unit a 沒有引用?<br>C. unit a 是否已經被釋放了?
 
问题还是没有解决呀!<br>问一下,什么情况下,unit会被释放,怎样释放!!!
 
后退
顶部