我在使用来自主机应用程序的数据时遇到问题 我想通过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。
答案 0 :(得分:1)
建议不要在Application和DLL边界之间传递本机Delphi对象 如果你想这样做,你应该使用Packages而不是DLL。
应用程序和Dll之间不共享全局变量。
在您的情况下,您引用DLL中的全局mainform
变量,如果您调试该代码,您将发现mainform
= nil或与{{1}不同的其他地址在您的主机应用程序中。
答案 1 :(得分:0)
ShareMem应该可以做到这一点。