Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [DLL] Zugriffsverletzung beim aufrufen einer Funktion (https://www.delphipraxis.net/107350-%5Bdll%5D-zugriffsverletzung-beim-aufrufen-einer-funktion.html)

xZise 26. Jan 2008 11:21


[DLL] Zugriffsverletzung beim aufrufen einer Funktion
 
Hallo DelphiPraxis,
ich habe ein kleines Problem beim Aufrufen einer Funktion einer Dll.

Und zwar programmiere ich gerade ein Updater für die Plugins von DPM un PE.

So sieht der Code im Moment aus:
Delphi-Quellcode:
procedure FindLoop(const APath : string);
var
  proc : Pointer;
  getinfo : TGetInfo;
  text : WideString;
begin
  if FindFirst(APath + '*', faAnyFile, sr) = 0 then
    try
      repeat
        if (sr.Name <> '.') and (sr.Name <> '..') then
        begin
          if (sr.Attr and faDirectory) = faDirectory then
            FindLoop(APath + sr.Name + '\')
          else if ExtractFileExt(sr.Name) = '.plg' then
          begin
            plg := LoadLibrary(PChar(APath + sr.Name));
            if (plg <> INVALID_HANDLE_VALUE) and (plg <> 0) then
            begin
              case programm of
                pPlainEdit : proc := GetProcAddress(plg, 'PEP_GetInfo');
                pDevProjectManager : proc := GetProcAddress(plg, 'DPMP_GetInfo');
              end;
              if proc = nil then
              begin
                FreeLibrary(plg);
              end else
              begin
                getinfo := TGetInfo(proc);
                try
                  // Diese Zeile:
                  getinfo(PEP_GI_VERSION, text);
                  ShowMessage(text);
                except
                  on e : Exception do
                  begin
                    ShowMessage(e.Message);
                    FreeLibrary(plg);
                  end;
                end;
              end;
            end;
          end;
        end;
      until FindNext(sr) <> 0;
    finally
      FindClose(sr);
    end;
end;
Ich durchsuche das Pluginverzeichnis nach den Plugins.

Und diese Funktion existiert in der DLL!

Wenn ich aber "getinfo" aufrufe, bekomme ich eine AV!

TGetInfo sieht übrigens so aus:
Delphi-Quellcode:
type
  TGetInfo = function(InfoId: DWord; var Data: WideString): DWord;
Was sein könnte, dass er mit WideString nicht zurecht kommt, aber ich habe im Forum dannach gesucht, und dort stand das ShareMem nicht benötigt wird?

MfG
xZise

mirage228 26. Jan 2008 11:31

Re: [DLL] Zugriffsverletzung beim aufrufen einer Funktion
 
Hi,

Hat die DLL-Funktion evtl eine andere Aufrufkonvention wie z.B. stdcall?

mfG
mirage228

xZise 26. Jan 2008 11:44

Re: [DLL] Zugriffsverletzung beim aufrufen einer Funktion
 
Jap... das hat sie... Wenn ich das hinter der Definition schreibe funktionierts :)

Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr.

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