Wie muss ich die Funktion TaskDialog aus der Comctl32.dll ansprechen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Ich habe zwar ein Vista up-to-date aber meine comctl32 DLL enthält diese Funktion auch nicht, was mich vermuten lässt, dass a) die Funktion wieder rausgepatcht wurde oder b) sie in der Link Bibliothek enthalten ist (also statisch eingefügt wird) und nur intern Funktionen von comctl32 (v6) verwendet.

Ich würde dir eher zum klassischen Weg raten.

Hallo,

Danke für deine Antwort!

  1. Wenn die Funktion rausgenommen wurde, müsste dass dann nicht auf MSDN vermerkt sein?
  2. Was meinst du mit statisch eingefügt?

Und was sollte der klassische Weg sein, MessageBox? Nein, es ging mir gerade um diese erweiterten Möglichkeiten! :(


Oder aber, kannst du die DLL mit C++, Java oder was du sonst noch hast (diese Sprachen beherrsche ich leider nicht) aufrufen?

Wäre super, wenn du mir daraus eine einzelne DLL schmieden könntest! Wie viel Aufwand so etwas bedeutet, davon habe ich nämlich keine Vorstellung.

Mit freundlichen Grüßen,
KnorxThieus (m)

0
@KnorxyThieus
  • Die Funktion wurde nicht rausgenommen, es bestätigte sich meine 2. Vermutung: Die Funktion steckt in der statischen Bibliothek, nicht in der DLL.
  • Trotz aktuellem Vista hat meine comctl32 nur Version 5.8, diese einfache Funktion hat also schon hohe Systemanforderungen.
  • Ist die comctl32.dll zu alt, fehlt der TaskDialog Funktion eine Abhängigkeit mit der Ordnungszahl 344 in der DLL (Fehlermeldung zur Laufzeit!).
  • Die MSVC(10) Headerdaten der TaskDialog Funktion sehen wie folgt aus:
#define TD_WARNING_ICON         MAKEINTRESOURCEW(-1)
#define TD_ERROR_ICON MAKEINTRESOURCEW(-2)
#define TD_INFORMATION_ICON MAKEINTRESOURCEW(-3)
#define TD_SHIELD_ICON MAKEINTRESOURCEW(-4)
enum _TASKDIALOG_COMMON_BUTTON_FLAGS{
TDCBF_OK_BUTTON = 0x0001, // selected control return value IDOK
TDCBF_YES_BUTTON = 0x0002, // selected control return value IDYES
 TDCBF_NO_BUTTON = 0x0004, // selected control return value IDNO
TDCBF_CANCEL_BUTTON = 0x0008, // selected control return value IDCANCEL
TDCBF_RETRY_BUTTON = 0x0010, // selected control return value IDRETRY
TDCBF_CLOSE_BUTTON = 0x0020 // selected control return value IDCLOSE
};
typedef int TASKDIALOG_COMMON_BUTTON_FLAGS; // Note: _TASKDIALOG_COMMON_BUTTON_FLAGS is an int
HRESULT WINAPI TaskDialog(__in_opt HWND hwndParent, __in_opt HINSTANCE hInstance, __in_opt PCWSTR pszWindowTitle, __in_opt PCWSTR pszMainInstruction, __in_opt PCWSTR pszContent, TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons, __in_opt PCWSTR pszIcon, __out_opt int *pnButton);
2
@Youkakun

Mit folgendem C Programm habe ich die DLL erfolgreich getestet: http://pastebin.com/LsFzqeQe

Letztendlich würde ich dir dennoch zum klassischen Bausatz Dialog+Beschreibung in den Resourcen raten.

0
@Youkakun

Wow, du hast dir ja echt Mühe gegeben! :-)

Ich habe deine DLL mal eingesetzt und jetzt klappt es im Prinzip auch!
Bloß werden, weil mein Basic kein Unicode verwalten kann, lauter chinesische Schriftzeichen wiedergegeben :(

Das kann man nicht zufälligerweise als kluger DLL-Ersteller wie du auf Ansi umstellen … :)

Vielen Dank jedoch bislang schon mal! :-)
Die Hilfreichste Antwort ist dir sicher, falls sie freigeschaltet wird!

0
@KnorxyThieus

Anstatt dir die Unicode-Konvertierung zu machen, gebe ich dir lieber Hilfe zur Selbsthilfe: Wenn dein String bloß ANSI kodiert ist, kannst du ihn in Unicode umwandeln, indem auf jedes Zeichenbyte ein Nullbyte folgen lässt (inklusive Terminierung).

'H', 'e', 'l', 'l', 'o', '\0' -> 'H', '\0', 'e', '\0', 'l', '\0', 'l', '\0', 'o', '\0', '\0', '\0'

Sollte dein String UTF-8 kodiert sein, gibt es auch eine Windows Funktion dafür: https://msdn.microsoft.com/en-us/library/windows/desktop/dd319072%28v=vs.85%29.aspx

Es wird doch irgendwelche Bibliotheken in BlitzBasic geben zur Umkodierung :/

1
@Youkakun

Ah, Danke! ♥ ^^

Hätte nie gedacht, dass die Nullen vor die Strings zu schreiben sind und vermutlich ewig mit Speicherbänken (sprich Zeigern) herumgebastelt …
Aber nein, solche Kodierungsmöglichkeiten bietet BB von Haus aus gar nicht :( Nullterminierte Strings gibt es hier auch nicht.

Aber Tatsache klappt es jetzt! :D
Nochmals, vielen Dank!!!

0

Cubase Trial Version lässt sich nicht starten!

Hallo,

Ich habe heute von offizieller Seite die Demo-Version von Cubase heruntergeladen und installiert.

Im Startmenü (Windows 8.1) taucht jetzt aber nur ein eLicenser Control Center auf, kein Eintrag zu Cubase.
Als ich die exe manuell aus dem Installationsverzeichnis starten wollte ( "C:\Program Files\Steinberg\Cubase LE AI Elements 7\Cubase LE AI Elements 7.exe" ), kam nur eine Fehlermeldung (siehe Bild).

Was soll ich tun?
Einfach neuzuinstallieren traue ich mich nicht, ist das nicht durch den Trial-Schutz blockiert?

Mit freundlichen Grüßen,
KnorxThieus

...zur Frage

GTA 5 Stürtzt ab durch dll datei?

Fehlermeldung

Name der fehlerhaften Anwendung: GTA5.exe, Version: 1.0.944.2, Zeitstempel: 0x5847f8aa Name des fehlerhaften Moduls: clr.dll, Version: 4.6.1586.0, Zeitstempel: 0x575a1507 Ausnahmecode: 0xc00000fd Fehleroffset: 0x00000000005e0b9c ID des fehlerhaften Prozesses: 0x29fc Startzeit der fehlerhaften Anwendung: 0x01d27bbf7e83445a Pfad der fehlerhaften Anwendung: F:\Program Files\Rockstar Games\Grand Theft Auto V\GTA5.exe Pfad des fehlerhaften Moduls: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Berichtskennung: 21983de9-c3f4-4398-96bd-dde2a9e035bb Vollständiger Name des fehlerhaften Pakets: Anwendungs-ID, die relativ zum fehlerhaften Paket ist:

Kann mir da wer helfen.

...zur Frage

Probleme beim Starten des Spiels "Der Bahngigant"?

Ich wollte das Spiel "Der Bahngigant" starten und anfangen zu spielen. Ich bekomme dann die folgende Fehlermeldung:

ATrain9.exe - Systemfehler

Das Programm kann nicht gestartet werden, da X3DAudio1_5.dll auf dem Computer fehlt. Installieren sie das Programm erneut, um das Problem zu beheben.

Dasselbe ist auch mit d3dx9_40.dll der Fall.

Nach einer Recherche habe ich herausgefunden, dass DirectX das Problem beheben soll und man auch die DLL-Dateien selber herunterladen kann.

Nur habe ich jetzt zwei Probleme

  1. Ich finde keine aktuelle und mit Windows 10 kompatible Version von DirectX
  2. Ich finde die DLL-Dateien auch nicht

Was kann ich jetzt tun?

...zur Frage

Was möchtest Du wissen?