![]() |
Anzeige:
|
|
|||||||
| Anregungen & Bugreports Für Vorschläge an den Autor Roland und neue XProfan-Versionen |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.776
|
In meiner Profanversion (XProfan9) ergibt das hier einen dicken Programmabsturz:
Code:
DEF ImageList_Create(5) !$SYSPATH + "\" + "COMCTL32.dll", "ImageList_Create"
DEF ImageList_AddIcon(2) !$SYSPATH + "\" + "COMCTL32.dll", "ImageList_AddIcon"
DEF ImageList_Destroy(1) !$SYSPATH + "\" + "COMCTL32.dll", "ImageList_Destroy"
REM DEF ImageList_Create(5) !"COMCTL32.dll", "ImageList_Create"
REM DEF ImageList_AddIcon(2) !"COMCTL32.dll", "ImageList_AddIcon"
REM DEF ImageList_Destroy(1) !"COMCTL32.dll", "ImageList_Destroy"
Def ExtractIcon(3) !$SYSPATH + "\" + "shell32.dll", "ExtractIconA"
DEF LoadIcon(2) !$SYSPATH + "\" + "USER32", "LoadIconA"
Def GetModuleHandle(1) !$SYSPATH + "\" + "Kernel32", "GetModuleHandleA"
Def GetModuleFileName(3) !$SYSPATH + "\" + "Kernel32", "GetModuleFileNameA"
Declare Imagecount%, Imagelist&, IconHolder$, IconHandle&, Listview&, Comctl32&, DLL$
Windowstyle 31+512
Windowtitle "Probleme mit Systempfad"
Window 0, 0 - 640, 440
Usermessages $10
Clear ImageList&
Listview& = Control("SysListView32", "", $54018001, 20, 100, 400, 250, %HWND, 2801, %Hinstance, $200)
IF FileExists($SYSPATH + "\" + "COMCTL32.dll")
Print "Comctl32 im Systemverzeichnis: "+$SYSPATH + "\" + "COMCTL32.dll"
endif
DLL$ = "Comctl32"
Comctl32& = GetModuleHandle(addr(DLL$))
Print "Handle der geladenen comctl32: " + str$(Comctl32&)
DLL$ = Space$(600)
GetModuleFileName(Comctl32&, addr(DLL$), 560)
Print "Dateiname der geladenen comctl32: "
Print Trim$(DLL$)
CreateImagelist
sendmessage(Listview&, $1003, 1, Imagelist&)
While %UMESSAGE <> $10
Waitinput
EndWhile
Case ImageList&<>0 : Imagelist_Destroy(ImageList&)
Freedll Comctl32&
Proc CreateImagelist
Imagecount% = 0
Case ImageList&<>0 : Imagelist_Destroy(ImageList&)
Imagelist& = ImageList_Create(16, 16, $FE | $1, 300, 50) 'Imagelist erzeugen
Print ImageList&
Print $SYSPATH + "\" + "COMCTL32.dll"
IconHolder$ = $SYSPATH + "\" + "Shell32.dll"
IconHandle& = ExtractIcon(%HINSTANCE, addr(IconHolder$), 23)
ImageList_AddIcon(Imagelist&, IconHandle&) 'Index 0 ist Hilfe
endproc
Grund dafür dürfte sein, dass die comctl32.dll bereits unter einem anderen Pfad vom Prozess geladen wurde. Bei External passiert übrigens das gleiche. Da die PSAPI.DLL ebenfalls in mehreren Versionen auf einem PC vorhanden sein kann, könnte das zu gewaltigen "Verwicklungen" führen.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
|
#2 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Das stürzt in der neuesten Version auch ab. Aber in DEF sind auch keine Pfade vorgesehen.
Normalerweise lädst du ja die DLL mit usedll() und hier gehört der Pfad zur DLL hin nicht in DEF. Mit Def werden ja nur die Funktionen einer geladenen DLL eingebunden.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
#3 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.776
|
Na ja - aber in External?
Code:
Def ExtractIcon(3) !$SYSPATH + "\" + "shell32.dll", "ExtractIconA"
DEF LoadIcon(2) !$SYSPATH + "\" + "USER32", "LoadIconA"
Def GetModuleHandle(1) !$SYSPATH + "\" + "Kernel32", "GetModuleHandleA"
Def GetModuleFileName(3) !$SYSPATH + "\" + "Kernel32", "GetModuleFileNameA"
Declare Imagecount%, Imagelist&, IconHolder$, IconHandle&, Listview&, Comctl32&, DLL$
Windowstyle 31+512
Windowtitle "Probleme mit Systempfad"
Window 0, 0 - 640, 440
Usermessages $10
Clear ImageList&
Listview& = Control("SysListView32", "", $54018001, 20, 100, 400, 250, %HWND, 2801, %Hinstance, $200)
IF FileExists($SYSPATH + "\" + "COMCTL32.dll")
Print "Comctl32 im Systemverzeichnis: "+$SYSPATH + "\" + "COMCTL32.dll"
endif
DLL$ = "Comctl32"
Comctl32& = GetModuleHandle(addr(DLL$))
Print "Handle der geladenen comctl32: " + str$(Comctl32&)
DLL$ = Space$(600)
GetModuleFileName(Comctl32&, addr(DLL$), 560)
Print "Dateiname der geladenen comctl32: "
Print Trim$(DLL$)
CreateImagelist
sendmessage(Listview&, $1003, 1, Imagelist&)
While %UMESSAGE <> $10
Waitinput
EndWhile
Case ImageList&<>0 : External($SYSPATH + "\" + "COMCTL32.dll", "Imagelist_Destroy", ImageList&)
REM Case ImageList&<>0 : External("COMCTL32.dll", "ImageList_Destroy", ImageList&)
Proc CreateImagelist
Imagecount% = 0
Case ImageList&<>0 : External($SYSPATH + "\" + "COMCTL32.dll", "ImageList_Destroy",ImageList&)
REM Case ImageList&<>0 : External("COMCTL32.dll", "ImageList_Destroy",ImageList&)
Imagelist& = External($SYSPATH + "\" + "COMCTL32.dll", "ImageList_Create", 16, 16, $FE | $1, 300, 50) 'Imagelist erzeugen
REM Imagelist& = External("COMCTL32.dll", "ImageList_Create", 16, 16, $FE | $1, 300, 50) 'Imagelist erzeugen
IconHolder$ = $SYSPATH + "\" + "Shell32.dll"
IconHandle& = ExtractIcon(%HINSTANCE, addr(IconHolder$), 23)
External($SYSPATH + "\" + "COMCTL32.dll", "ImageList_AddIcon", Imagelist&, IconHandle&) 'Index 0 ist Hilfe
REM External("COMCTL32.dll", "ImageList_AddIcon", Imagelist&, IconHandle&) 'Index 0 ist Hilfe
endproc
Bei manchen DLLs scheinen "Def" und External die DLL aus dem Systemverzeichnis nachzuladen, in diesenm Fall wird nicht nachgeladen.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT Geändert von AHT (14.12.2009 um 06:35 Uhr) |
|
|
|
|
|
#4 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Hallo,
das ist leider eine (meines Erachtens sehr dumme) Eigenart von Windows: Ist ein Modul (meist eine DLL) erst einmal geladen, dann wird beim neuerlichen Laden desselben Moduls (selbst wenn es eigentlich eine andere Version in einem anderen Pfad ist) nur der Zähler des geladenen Moduls hochgezählt. Es wird offensichtlich der interne Modulname zur Unterscheidung herangezogen und nicht der Pfad. Das hat uns in der Firma, in der ich arbeite und wo Programme an über 2000 Mitarbeiter auf ihre Notebooks verteilt werden, schon einiges an Kopfzerbrechen bereitet. Es ging da um eine Steuer-Berechnungs-DLL, die von verschiedenen Programmen genutzt wurde und dummerweise mehrmals auf dem System vorhanden war. Bei einem Update wurde ein Speicherort übersehen und je nachdem, welches Programm zuerst aufgerufen wurde, wurde in allen Programmen falsch oder richtig gerechnet. External() kann da auch nicht helfen, denn es werden intern ja immer die gleichen Windows-APIs benutzt. Wenn der Programmierer einen Pfad angibt, wird dieser an die API übergeben. COMCTL32.DLL ist in diesem Zusammenhang ein besonders "beliebter" Kandidat. Es gibt die eine oder anderer Anwendung, die eine eigene Version mitbringt. Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
|
#5 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Man könnte ja überprüfen ob die DLL bereits geladen ist, wenn ja entladen und die gewünschte Version neu laden.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
|
#6 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.776
|
Roland - das kann so aber nicht stimmen, denn folgendes funktioniert wieder perfekt:
Code:
DEF ImageList_Create(5) !$SYSPATH + "\" + "COMCTL32.dll", "ImageList_Create"
DEF ImageList_AddIcon(2) !$SYSPATH + "\" + "COMCTL32.dll", "ImageList_AddIcon"
DEF ImageList_Destroy(1) !$SYSPATH + "\" + "COMCTL32.dll", "ImageList_Destroy"
REM DEF ImageList_Create(5) !"COMCTL32.dll", "ImageList_Create"
REM DEF ImageList_AddIcon(2) !"COMCTL32.dll", "ImageList_AddIcon"
REM DEF ImageList_Destroy(1) !"COMCTL32.dll", "ImageList_Destroy"
Def ExtractIcon(3) !$SYSPATH + "\" + "shell32.dll", "ExtractIconA"
DEF LoadIcon(2) !$SYSPATH + "\" + "USER32", "LoadIconA"
Def GetModuleHandle(1) !$SYSPATH + "\" + "Kernel32", "GetModuleHandleA"
Def GetModuleFileName(3) !$SYSPATH + "\" + "Kernel32", "GetModuleFileNameA"
Declare Imagecount%, Imagelist&, IconHolder$, IconHandle&, Listview&, Comctl32&, DLL$
Windowstyle 31+512
Windowtitle "Probleme mit Systempfad"
Window 0, 0 - 640, 440
Usermessages $10
Clear ImageList&
Listview& = Control("SysListView32", "", $54018001, 20, 200, 400, 140, %HWND, 2801, %Hinstance, $200)
DLL$ = "Comctl32"
Comctl32& = GetModuleHandle(addr(DLL$))
Print ""
Print "Handle der zuerst geladenen comctl32: " + str$(Comctl32&)
Print ""
DLL$ = Space$(600)
GetModuleFileName(Comctl32&, addr(DLL$), 560)
Print "Dateiname der zuerst geladenen comctl32: "
Print Trim$(DLL$)
Comctl32& = UseDLL($SYSPATH + "\" + "COMCTL32.dll")
Print ""
Print "Handle der zuletzt geladenen comctl32: " + str$(Comctl32&)
DLL$ = Space$(600)
GetModuleFileName(Comctl32&, addr(DLL$), 560)
Print ""
Print "Dateiname der zuletzt geladenen comctl32: "
Print Trim$(DLL$)
CreateImagelist
sendmessage(Listview&, $1003, 1, Imagelist&)
While %UMESSAGE <> $10
Waitinput
EndWhile
Case ImageList&<>0 : Imagelist_Destroy(ImageList&)
Freedll Comctl32&
end
Proc CreateImagelist
Imagecount% = 0
Case ImageList&<>0 : Imagelist_Destroy(ImageList&)
Imagelist& = ImageList_Create(16, 16, $FE | $1, 300, 50) 'Imagelist erzeugen
IconHolder$ = $SYSPATH + "\" + "Shell32.dll"
IconHandle& = ExtractIcon(%HINSTANCE, addr(IconHolder$), 23)
ImageList_AddIcon(Imagelist&, IconHandle&) 'Index 0 ist Hilfe
endproc
Da baut also nicht Windows den Mist - oder sehe ich das falsch?
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT Geändert von AHT (14.12.2009 um 10:08 Uhr) |
|
|
|
|
|
#7 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Hallo Andreas,
SORRY, ich habe wohl nicht genau genug geschaut und geschrieben. Jetzt sehe ich, was im ersten Listing das Problem ist: Du verwendest nur die API GetModuleHandle(). Diese lädt ein Modul aber nicht, sondern ermittelt nur das Handle eines geladenen Moduls aufgrund des Modul-Namens. Hier spielt der Pfad offensichtlich keine Rolle. Im letzten Beispiel nutzt Du UseDLL (hinter dem die Api LoadLibrary() steckt). Diese lädt ein Modul in den Speicher, wenn es noch nicht im Speicher ist und setzt anderenfalls den Zähler hoch. Hier wird offensichtlich der Pfad berücksichtigt. Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
|
#8 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.776
|
Nein Roland, denn folgendes funktioniert ja auch:
Code:
Def GetModuleInformation(4) !"Psapi.dll", "GetModuleInformation" DEF GetCurrentProcess(0) !"kernel32", "GetCurrentProcess" 'Ermittel das Handle des aktiven Prozesses. Def GetModuleHandle(1) !"Kernel32", "GetModuleHandleA" Def GetModuleFileName(3) !"Kernel32", "GetModuleFileNameA" Declare MODULEINFO#, DLL$, PSAPI$, PSAPI& CLS DLL$ = "Psapi.dll" PSAPI&=GetModuleHandle(addr(DLL$)) Print "Handle der Psapi.dll: " +Str$(PSAPI&) Print "Dateiname der Psapi.dll: " PSAPI$ = Space$(600) IF PSAPI&<>0 GetModuleFileName(PSAPI&, addr(PSAPI$), 560) Print PSAPI$ endif Print "" Print "" Print "Kernel32.dll Daten: " DIM MODULEINFO#, 12 DLL$ = "Kernel32.dll" GetModuleInformation(GetCurrentProcess(), GetModuleHandle(addr(DLL$)), MODULEINFO#, 12) Print "Base:" + Str$(Long(MODULEINFO#, 0)) Print "Size:" + Str$(Long(MODULEINFO#, 4)) Print "Entry:" + Str$(Long(MODULEINFO#, 8)) Dispose MODULEINFO# While 1 Waitinput EndWhile Warum verhält sich XProfan bei der Comctl32.dll anders? Das liegt doch nicht an Windows??? Dass das nicht an Windows liegen kann, sieht man doch hier, oder?
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT Geändert von AHT (14.12.2009 um 11:19 Uhr) |
|
|
|
|
|
#9 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.776
|
Ich möchte noch etwas kontrollieren und brauche deshalb dringend noch einen Screenshot von diesem Quelltext vom Rechner von Frank Abbing.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#10 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Zu GetModuleHandle:
Zitat aus MSDN: "Retrieves a module handle for the specified module. The module must have been loaded by the calling process. ... If lpModuleName does not include a path and there is more than one loaded module with the same base name and extension, you cannot predict which module handle will be returned. To work around this problem, you could specify a path, use side-by-side assemblies, or use GetModuleHandleEx to specify a memory location rather than a DLL name. ..." Die ComCtl32.dll ist üblicherweise schon immer geladen. Die PSAPI.DLL offensichtlich nicht. Daher bringt GetModuleHandle() da auch die 0 als Ergebnis = Modul ist nicht geladen. Und nun kommt's: GetModuleInformation() verwendet die PSAPI.DLL und lädt diese, wenn sie zuvor nicht geladen wurde. Das lässt sich zeigen, indem Du die Programmzeilen zur Ermittlung des Handles und Namens der PSAPI.DLL nach diesem Aufruf nochmal einbaust. Zitat aus MSDN: "The GetModuleInformation function does not retrieve information for modules that were loaded with the LOAD_LIBRARY_AS_DATAFILE flag. For more information, see LoadLibraryEx. Starting with Windows 7 and Windows Server 2008 R2, Psapi.h establishes version numbers for the PSAPI functions. The PSAPI version number affects the name used to call the function and the library that a program must load. If PSAPI_VERSION is 2 or greater, this function is defined as K32GetModuleInformation in Psapi.h and exported in Kernel32.lib and Kernel32.dll. If PSAPI_VERSION is 1, this function is defined as GetModuleInformation in Psapi.h and exported in Psapi.lib and Psapi.dll as a wrapper that calls K32GetModuleInformation. Programs that must run on earlier versions of Windows as well as Windows 7 and later versions should always call this function as GetModuleInformation." Ich hoffe, das hilft Dir weiter. Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
|
|
#11 (Direktlink) | |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.776
|
OK, dann anders:
Wie du siehst, wird hier aber ein Pfad übergeben. Warum sollte sich also LoadLibrary, wenn es innerhalb von External aufgerufen wird, anders veralten als LoadLibrary, wenn es über UseDLL aufgerufen wird??? Was tut External genau? Welche API ruft External auf bzw. welchen Delphibefehl? PS: Zitat:
Code:
Def GetModuleInformation(4) !"Psapi.dll", "GetModuleInformation" DEF GetCurrentProcess(0) !"kernel32", "GetCurrentProcess" 'Ermittel das Handle des aktiven Prozesses. Def GetModuleHandle(1) !"Kernel32", "GetModuleHandleA" Def GetModuleFileName(3) !"Kernel32", "GetModuleFileNameA" Declare MODULEINFO#, DLL$, PSAPI$, PSAPI& CLS DLL$ = "Psapi.dll" PSAPI&=GetModuleHandle(addr(DLL$)) Print "Handle der Psapi.dll vor dem Aufruf: " +Str$(PSAPI&) Print "Dateiname der Psapi.dll vor dem Aufruf: " PSAPI$ = Space$(600) IF PSAPI&<>0 GetModuleFileName(PSAPI&, addr(PSAPI$), 560) Print PSAPI$ endif Print "" Print "" Print "Kernel32.dll Daten: " DIM MODULEINFO#, 12 DLL$ = "Kernel32.dll" GetModuleInformation(GetCurrentProcess(), GetModuleHandle(addr(DLL$)), MODULEINFO#, 12) Print "Base:" + Str$(Long(MODULEINFO#, 0)) Print "Size:" + Str$(Long(MODULEINFO#, 4)) Print "Entry:" + Str$(Long(MODULEINFO#, 8)) Print "" Print "" DLL$ = "Psapi.dll" PSAPI&=GetModuleHandle(addr(DLL$)) Print "Handle der Psapi.dll vor dem Aufruf: " +Str$(PSAPI&) Print "Dateiname der Psapi.dll vor dem Aufruf: " PSAPI$ = Space$(600) IF PSAPI&<>0 GetModuleFileName(PSAPI&, addr(PSAPI$), 560) Print PSAPI$ endif Dispose MODULEINFO# While 1 Waitinput EndWhile
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT Geändert von AHT (14.12.2009 um 13:32 Uhr) |
|
|
|
|
|
|
#12 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Zitat:
was soll der Quellcode bezüglich Deiner Frage demonstrieren? Weder External() noch UseDLL() kommen vor. Es wird in beiden Fällen API verwandt. Zum genauen Aufruf in XProfan kann ich vielleicht heite Abend antworten. Am Arbeitsplatz liegt mir der Quellcode nicht komplett vor. Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
|
|
#13 (Direktlink) | |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.089
|
Zitat:
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
|
#14 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.776
|
@Frank: Wir hatten mal das Problem, dass beim Beenden eines Quellcodes, der vorher die PSAPI.DLL geladen hatte, das Programm mit Zugriffsverletzung abstürzte - und das nur auf deinem Rechner. Ich wollte mal nachsehen, ob auf deinem Rechner die PSAPI.DLL evtl. bereits schon vorher über den Hook, der Auslöser des Problems war, geladen wird. Das ist nicht der Fall.
@Roland: Ob nun External oder Def ist eigentlich egal - in beiden Fällen wird durch das Aufrufen der jeweiligen API die DLL nachgeladen, wenn sie nicht bereits geladen ist. Ist sie geladen, wird, so denke ich, der Loadcount um 1 erhöht. Beim Laden passiert ein Fehler - das was die DLL lädt, kümmert sich nicht in ausreichender Weise um den Pfad der DLL. PS: Nach dem Aufruf der API wird die DLL auch wieder entladen, bzw. der Loadcount verringert. Wenn ich nichts übersehen habe, kann derjenige, der da falsch lädt, eigentlich nicht Windows selbst sein - dann bleibt im Prinzip nur Profan oder Delphi über. Im Augenblick vermute ich bei dem Fehler, der bei Frank passiert ist und der Sache mit der COMCTL32 einen Zusammenhang, denn auch die PSAPI.DLL ist oft in mehreren Versionen auf einem Rechner vorhanden - und bei anderen DLLs sind mir solche Sachen noch nie passiert. Wenn so etwas wie bei Frank passieren kann, kann im Prinzip alles passieren - und da möchte ich schon genau wissen, was da die Ursache ist und was dort abläuft.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#15 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Hallo,
ich habe noch mal nachgesehen. Es ist so wie ich vermutet habe: (Pfad ist ein Delphi-String mit dem Namen der DLL incl. des Pfades, wie vom Programmierer im Programm angegeben.) Code:
X := LoadLibrary(Addr(Pfad));
If X <> 0 Then Begin
Proc := GetProcAddress(X,Addr(Funktion));
<...>
<Schieben der Parameter auf den Stack und Aufruf der Funktion>
<...>
FreeLibrary(X);
End;
Reine API, ohne dass XProfan oder Delphi da etwas machen. Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| mobile disk external data storage DB-337-U2C treiber | Shareef | Treiber-Forum | 1 | 25.11.2007 21:50 |
| probleme mit toshiba 400gb external usb hard drive | katitomati | Windows XP | 2 | 15.11.2007 08:24 |
| Problem ATI External ..... Modul | Carola | Windows Vista | 10 | 02.10.2007 12:09 |
| Problem mit External cache | DeadKennedys | Hardware - Problemlösungen | 8 | 06.01.2007 13:52 |
| Suche Treiber für Topic 56K External Data Fax Voice Modem XP | waidla | Hardware - Problemlösungen | 7 | 27.03.2005 14:27 |