1

我正在使用 DelphiPraxis 的 WorkerThread 和 Delphi XE2。 http://www.delphipraxis.net/93835-workerthread-der-diener-im-hintergrund.html 在我的 JobThread 中,我正在加载一个 DLL,它会等待(用于测试..)

function DLLClass.doStuff(): boolean;
var
  I: integer;
begin
  try
    for I := 0 to 100 do
    begin
      sleep(10);
      if (assigned(StatusCallback)) then
        StatusCallback(PWideChar(I));
    end;
    Result := true;
  except
    on e: exception do
    begin
      error := 'DLL FEHLER: ' + e.ClassName + ' - ' + e.Message;
      Result := false;
    end;
  end;
end;

“StatusCallback”是对正在加载 DLL 的线程中的过程的引用:

  TStatusUpdate = procedure(Status: PWideChar) of object; stdcall;

我的回调如下所示:

procedure JobThread.statuscall(status: pwidechar); stdcall;
begin
  //saving the Status in a global Variable..
  if Assigned(OnStatus) then
    fThread.Synchronize(syncStatus);
end;

哪个电话:

procedure JobThread.syncStatus;
begin
  if Assigned(OnStatus) then
  begin
    OnStatus(self);
  end;
end; //<- AV here!

OnStatus 事件处理程序:

Procedure TfMain.uploadStatus(aJob: TWorkerThreadJob);
begin
  //doing nothing.. yet an AV
  sleep(10);
end;

我认为这个问题在某种程度上与 DLL 无法与 MainThread 同步有关。关于解决 Synchronize 的任何想法(如果它实际上是问题)?

4

0 回答 0