Fremd DLL - Funktionsnamen abfragen

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Fremd DLL - Funktionsnamen abfragen

Beitrag von brandelh »

Hi,

bei vielen API / DLL Funktionen wird nun ja zwischen dem öffentlichen Namen und dem mit W/A Anhang unterschieden.
Also in der Doku steht GibMirString(), tatsächlich muss man aber GibMirStringA() aufrufen.

DllInfo() kann laut Doku nur die Xbase++ DLLs nach exportierten Funktionen abfragen, wie geht das bei fremden dynamischen DLLs ?
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Fremd DLL - Funktionsnamen abfragen

Beitrag von georg »

Hallo, Hubert -


wäre das was für Dich?

http://www.nirsoft.net/utils/dll_export_viewer.html
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fremd DLL - Funktionsnamen abfragen

Beitrag von brandelh »

das Tool ist super, danke.

für die Integration wäre natürlich der selbst programmierte Weg besser, aber Listen lesen geht ja auch ;-)
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Fremd DLL - Funktionsnamen abfragen

Beitrag von Manfred »

stümmt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fremd DLL - Funktionsnamen abfragen

Beitrag von brandelh »

Hi,

man schrieb mir, dass es keine API Funktion dafür gibt, sondern man die Tabelle der exportierten Funktionen auslesen muss.
In 2 DLL Dateien habe ich so eine gefunden direkt nach dem exacten Namen der DLL Datei. Jeweils durch chr(0) getrennt und sortiert.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fremd DLL - Funktionsnamen abfragen [erledigt]

Beitrag von brandelh »

dieser Code hat bei 3 DLL richtige Ergebnisse geliefert:

Code: Alles auswählen

PROCEDURE Main
   LOCAL aF:={}, cDLLName,cDLLPfad, cBufDLL, nStart, nEnd, nLen, i := 0

   cDLLName := "libxl.dll"
   cDLLPfad := ""
   cBufDLL  := memoread(cDLLPfad+cDllName)
   nStart   := at(lower(cDLLName),lower(@cBufDLL))
   if nStart > 0
      nEnd   := at(chr(0),@cBufDLL,nStart)
      nLen := nEnd-nStart
      ? "Startwert: ",nStart, nEnd, substr(@cBufDLL,nStart,nLen)
      ?
      ? "Funktionsliste:"
      do while .t.
         nStart := nEnd+1
         if substr(@cBufDLL,nStart,1)==chr(0) // alles eingelesen
            ? "---"
            exit
         endif
         nEnd   := at(chr(0),@cBufDLL,nStart)
         i++
         nLen := nEnd-nStart
         aadd(aF,substr(@cBufDLL,nStart,nLen))
         ? str(i,4)+":",aF[i]
      enddo
   else
      ? "Funktionsliste wurde nicht gefunden. "
   endif

   ? "Ende"
   inkey(10)

RETURN
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Fremd DLL - Funktionsnamen abfragen

Beitrag von AUGE_OHR »

hi,

zunächst mal den Code

Code: Alles auswählen

#include "DLL.CH"
PROCEDURE Main 
LOCAL nDll, cCall 

      nDll := DllLoad( "libxl.dll" ) 
      IF nDll <> 0 
         // hier stehen lassen ! 
         WAIT
         // 
         DllUnload( nDll ) 
      ENDIF
RETURN
nun nehme ich den Dependency Walker ( z.b. hier http://www.heise.de/download/dependency-walker.html ) und starte es mit dem EXE als Parameter

Code: Alles auswählen

depends libxl.exe
wie ihr am Code seht muss ich bis zum WAIT warten bis es im DW interessant wird.
depends.PNG
depends.PNG (84.47 KiB) 4607 mal betrachtet
wenn ich den TreeView Node LIBXL.DLL öffne erscheinen rechts die Functionen.
wenn man nun einen DblClick auf eine Function macht öffnet er den Browser und sucht bei MSDN.
gruss by OHR
Jimmy
Antworten