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
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
wie ihr am Code seht muss ich bis zum WAIT warten bis es im DW interessant wird.
- 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.