Seite 1 von 1

Fremd DLL - Funktionsnamen abfragen

Verfasst: Do, 24. Okt 2013 8:31
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 ?

Re: Fremd DLL - Funktionsnamen abfragen

Verfasst: Do, 24. Okt 2013 8:39
von georg
Hallo, Hubert -


wäre das was für Dich?

http://www.nirsoft.net/utils/dll_export_viewer.html

Re: Fremd DLL - Funktionsnamen abfragen

Verfasst: Do, 24. Okt 2013 9:13
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 ;-)

Re: Fremd DLL - Funktionsnamen abfragen

Verfasst: Do, 24. Okt 2013 9:37
von Manfred
stümmt.

Re: Fremd DLL - Funktionsnamen abfragen

Verfasst: Do, 24. Okt 2013 10:30
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.

Re: Fremd DLL - Funktionsnamen abfragen [erledigt]

Verfasst: Do, 24. Okt 2013 11:08
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

Re: Fremd DLL - Funktionsnamen abfragen

Verfasst: Fr, 25. Okt 2013 1:49
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) 4625 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.