Как использовать запущенное приложение из dll? - PullRequest
0 голосов
/ 04 октября 2010

У меня проблемы с использованием данных из хост-приложения.
Я хочу отправить строку через dll в хост, а затем объединить ее с некоторыми данными из приложения хоста.

Просто включив форму в предложения использования, я могу использовать методы для отправки данных на хост. Когда данные получены, я пытаюсь добавить переменную 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 ]

1 голос
/ 04 октября 2010

Рекомендуется не передавать собственные объекты Delphi между границами приложения и DLL.
Если вы хотите сделать это, вы должны использовать пакеты вместо DLL.

Глобальные переменные не разделяются между приложением и Dll.

В вашем случае вы ссылаетесь на глобальную переменную mainform в DLL, если вы отладите этот код, вы обнаружите, что mainform = nil или другой адрес, который не совпадает с mainform в вашем хост-приложении. .

0 голосов
/ 04 октября 2010

ShareMem должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...