[英]How to use an running application from a dll?
我在使用主机应用程序中的数据时遇到问题。
我想通过dll将字符串发送到主机中,然后将其与主机应用程序中的某些数据组合在一起。
通过在uses子句中仅包含表单,我可以使用方法将数据发送到主机,当数据被获取时,我尝试添加一个lokal变量,这是当我遇到访问冲突时:
主办:
procedure TMainForm.DllLink(sMessage: String);
begin
try
//This is ok:
Showmessage(sMessage);
//This is causes Access error:
Showmessage(sMessage +sPid);
except
Showmessage('Access violation');
end;
end;
Dll:
procedure Transfer(sMessage: PChar); stdcall;
var
sMyPid : String;
begin
try
//Get error if i try to use this method to get sPid which is a string:
sMyPid := MainForm.GetPid;
//Or this:
MainForm.NextsysDllLink(sMessage);
except
showmessage('Error');
end;
end;
我不认为dll使用的是正在运行的应用程序形式,这是导致访问冲突的原因(也许是我错了?)如何使dll知道正在运行的应用程序(即其主机应用程序),并使用该实例来获取还是操纵自身的数据?
我正在使用Delphi 5。
建议不要在应用程序和DLL边界之间传递本机Delphi对象。
如果要这样做,应该使用Packages而不是DLL。
全局变量不在应用程序和DLL之间共享。
在您的情况下,您引用DLL中的全局mainform
变量,如果调试该代码,则会发现mainform
= nil或与主机应用程序中的mainform
另一个地址。
ShareMem应该可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.