Dll Call ?

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 486
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Dll Call ?

Beitrag 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
J.Renseler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Do, 15. Nov 2007 11:40
Wohnort: Krefeld
Kontaktdaten:

Beitrag 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
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 486
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag 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
J.Renseler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Do, 15. Nov 2007 11:40
Wohnort: Krefeld
Kontaktdaten:

Beitrag 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
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 486
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag 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
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 486
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag 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
J.Renseler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Do, 15. Nov 2007 11:40
Wohnort: Krefeld
Kontaktdaten:

Beitrag 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
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 486
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag von Wolfgang_B »

Hallo Jannik,

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

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

Beitrag 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
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 486
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Beitrag 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
Antworten