Seite 1 von 1

Dll Call ?

Verfasst: Mo, 17. Dez 2007 12:41
von Wolfgang_B
Hallo,

habe in irgendeinem Beitrag den folgenden Aufruf gefunden :

DllCall("SHELL32.DLL",DLL_STDCALL,"ShellExecuteA",AppDeskTop():getHWnd(),"Open",cURL,Nil,CurDir(),SW_RESTORE)

Hiermit wird der Windows Internet Explorer aufgerufen. Warum??? Wo ist der Hinweis auf das aufzurufende Programm? Außerdem funktioniert das nur bei meinem Rechner mit WIN2000. Bei WIN XP passiert erst mal nix, dann stürzt Windows ab. :-(

Außerdem habe ich in anderen Beiträgen was von url.dll und anderen DLL's gelesen, die ich aber nirgends finde.

Die Fragen klingen vielleicht etwas naiv, bin mit xbase++ aber noch nicht so fit ..

Bin für jeden Tipp dankbar.

Gruß Wolfgang

Verfasst: Mo, 17. Dez 2007 13:07
von J.Renseler
Hallo,

über diesen ApiCall führst du ein Kommando über die Windows Console aus.

Der 2. Parameter ist der Modus in dem der Befehl ausgeführt wird. Bei dir "open". Zusätzlich dazu gibt es noch die Parameter "print" und "explore". Zusätzlich müsstest du nur noch die Webseite angeben und wie sich das Fenster verhalten soll. (Normal, Minimiert usw...)

Den Aufruf des zuständigen Programms übernimmt Windows automatisch!


Ich rufe bei mir im Programm den Standart Browser über folgenden Aufruf auf, was unter Windows 2000 und XP Problemlos funktioniert:

ShellExecuteA( AppDesktop():getHWnd(), SHELL_OPEN, "www.meineWebseite.de" , , , SW_NORMAL)

Gruß,
Jannik

Verfasst: Mo, 17. Dez 2007 14:06
von Wolfgang_B
Hallo Jannik,

danke für die Antwort. Hat schon etwas Klarheit in die Sache gebracht. Wenn ich Dein Statement einbaue, macht mir schon der Linker Ärger.

unresolved external symbol SHELLEXECUTEA

Ist mir auch irgendwie logisch, da er ja die DLL erst zur Laufzeit benutzt.

Gruß Wolfgang

Verfasst: Mo, 17. Dez 2007 14:15
von J.Renseler
Für mein Statement musst du erst noch folgende Zeile in dein Programm einbinden , damit der Linker weiß was er mit deinem Aufruf machen muss.

DLLFUNCTION ShellExecuteA( nWinHandle, cMode, cExe, cFile, cDir, nShow) USING STDCALL FROM SHELL32.DLL


Eine ausführliche Beschreibung zu DLLFUNKTION ist auch in der Xbase Hilfe.
Im Prinzip unterscheidet sich aber die Deklaration über DLLFUNKTION nicht von deinem Weg über DllCall().

Gruß,
Jannik

Verfasst: Mo, 17. Dez 2007 14:52
von Wolfgang_B
Jetzt wird mir die Sache schon transparenter. Werde das heute abend mal auf meinem Rechner mit XP versuchen. Mal sehen, was passiert.

Vielen Dank

Gruß Wolfgang

Verfasst: Di, 18. Dez 2007 12:09
von Wolfgang_B
Hallo Janik,

hat unter XP leider nicht funktioniert. Habe es auf zwei verschiedenen Rechnern versucht. Der Rückgabewert von DllCall oder ShellExecuteA (je nach dem wie man die Funkton schreibt) ist immer NIL!

Hab keinen Plan, an was das liegen könnte. Die Hilfe in Alaska sagt da nur:

"DllCall() gibt den Rückgabewert der ausgeführten DLL-Funktion zurück. Falls die DLL gemäß der Xbase++ Aufrufkonvention erzeugt wurde, kann der Rückgabewert einen beliebigen Xbase++ Datentyp haben. Bei allen anderen Aufrufkonventionen ist der Rückgabewert vom Datentyp "numerisch"."

Frag mich nur, was in diesem Zusammhang der Unterschied von meinem Bürorechner (W2000) und meinem Entwicklungsrechner (XP) ist

Vieleicht hat noch jemand anders die selben Probleme.

Gruß Wolfgang

Verfasst: Di, 18. Dez 2007 12:13
von J.Renseler
Hallo,

das hört sich ein bischen so an als ob der die Datei nicht finden kann, was bei der shell32.dll sehr seltsam wäre. Aber kopiere doch bitte die Datei trotzdem mal in dein Entwicklungsverzeichniss. Du müsstest Sie unter \Windows\System32 finden.

Gruß,
Jannik

Verfasst: Mi, 19. Dez 2007 11:18
von Wolfgang_B
Hallo Jannik,

Hat leider nichts gebracht. Status unverändert...:-(

Gruß Wolfgang

Verfasst: Do, 20. Dez 2007 0:41
von AUGE_OHR
hi,
wasi01 hat geschrieben: Frag mich nur, was in diesem Zusammhang der Unterschied von meinem Bürorechner (W2000) und meinem Entwicklungsrechner (XP) ist
so wie ich deine OS() sehe ... waren die XP Rechner vorher mit W98se
oder so und wurden dann "upgedated" auf XP ?
gehe mal in die CMD Box und vergleiche die SET Angaben.

dito was für eine Version Xbase++ verwendest du und "woher" lädt
er "welche" DLL ( XppLoad >> myDLL.TXT )

gruss by OHR
Jimmy

Verfasst: So, 23. Dez 2007 14:32
von Wolfgang_B
Hallo Jannik, hallo Jimmy

hab mir selber ein Ei gelegt. Funktioniert jetzt einwandfrei. Man sollte bevor man hier lospostet vielleicht wirklich mal seine Laufzeitumgebung anschauen ... :-(

Der Fehler war, daß ich die Entwicklungsumgebung auf einen USB Stick kopiert habe und in der Firma alle Einträge der Registry auf diesen Stick verbogen habe. Zuhause auf meinem Entwicklungsrechner natürlich nicht. Als ich man dann vom USB Stick aus die Anwendung gestartet habe, wurden natürlich bestimmte Dateien nicht mehr gefunden.

Nochmals herzlichen Dank für die Hilfe!

Viele Grüße und schöne Weihnachten

Wolfgang