Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Aufruf eines WebService aus einer DLL heraus (https://www.delphipraxis.net/88678-aufruf-eines-webservice-aus-einer-dll-heraus.html)

UweR 19. Mär 2007 11:27


Aufruf eines WebService aus einer DLL heraus
 
Hallo Leute,

ich habe Probleme eine DLL zu entladen mit der ich einen WebService aufgerufen habe. Die DLL wird dynamisch angebunden, die Funktion aufgerufen und wenn ich dann die DLL mit FreeLibrary entladen will hängt sich mein Proc dabei auf.

Hier erst mal die Funktion in der DLL:

Delphi-Quellcode:
   CoInitialize(nil);

   service := GetInversServiceSoap();
   service.PublishLocationByCarAliasID(CarID, nLonDegree, nLonMinute, rLonSecond, nLatDegree, nLatMinute, rLatSecond);
   CoUninitialize();
Das proc das die DLL aufruft sieht erst mal so aus:

Delphi-Quellcode:
   FDLLHandle := 0;
   SaveGPS := Nil;
   FDLLHandle := LoadLibrary('SaveGPS.DLL');
   if FDLLHandle <> 0 then begin
      @SaveGPS := GetProcAddress(FDLLHandle, 'SaveGPSCarID');
      SaveGPS(5054.4759, 758.9962, 0);
      FreeLibrary(FDLLHandle);

   end;
Irgendjemand ne Idee?

the-networker 25. Mär 2007 14:22

Re: Aufruf eines WebService aus einer DLL heraus
 
Hallo Uwe,
das Problem hatte ich in der Vergangenheit auch.
Habe es dann wie folgt gelöst:
Delphi-Quellcode:
library WebMediaWebClient;
{$R *.RES}
uses
  Windows,
  Sysutils,
  activex,
  availability,//meine Funktionsunit für Dich ohne Belang
  Comobj;



procedure DLLEntryPoint(dwReason:dword);
begin
  case dwReason of
    DLL_PROCESS_ATTACH:
      begin
      OleCheck(CoInitialize(nil));
      end;
    DLL_PROCESS_DETACH:
    begin
      CoUnInitialize; //OLE DeInitializieren
    end;
  end;
end;

exports
BHGetAvailability;//Export aus meiner Funktionsunit

begin
  DllProc := @DLLEntryPoint;
  DllEntryPoint(DLL_PROCESS_ATTACH);
end.
Gruß
Uwe Lange

UweR 26. Mär 2007 07:38

Re: Aufruf eines WebService aus einer DLL heraus
 
Hallo Uwe,

Danke, jetzt gehts!

Bernhard Geyer 26. Mär 2007 08:06

Re: Aufruf eines WebService aus einer DLL heraus
 
Das Problem ist vermutlich das du mit CoUninitialize dein COM-Appartment abmeldest obwohl du noch gültige Interface-Zeiger hast. Wenn diese nun (automatisch) freigegeben werden so kracht es auf COM-Ebene.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz