繁体   English   中英

如何从dll使用正在运行的应用程序?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM