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

时间:2010-10-04 10:38:03

标签: delphi 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。

2 个答案:

答案 0 :(得分:1)

建议不要在Application和DLL边界之间传递本机Delphi对象 如果你想这样做,你应该使用Packages而不是DLL。

应用程序和Dll之间不共享全局变量。

在您的情况下,您引用DLL中的全局mainform变量,如果您调试该代码,您将发现mainform = nil或与{{1}不同的其他地址在您的主机应用程序中。

答案 1 :(得分:0)

ShareMem应该可以做到这一点。