WinHTTP für MinGW?

Thomasio

Erfahrenes Mitglied
Bei M$ finden sich diverse Hinweise, dass man statt dem alten WinInet jetzt besser WinHTTP verwenden sollte.
Ich habe mich da ein bischen reingelesen und finde es tatsächlich besser, nur dummerweise finde ich die Library nicht, nicht in 32bit und selbst in neuesten Versionen von MinGW64 ist sie nicht enthalten.
Angeblich steckt die nötige Library im SDK, einzelne Downloads habe ich keine gefunden, sprich ich müsste mir x100MB runterladen und installieren, nur um an die Datei zu kommen und so wie ich M$ kenne ist dann auch noch ein Haken dran, sprich selbst wenn ich mir das SDK runterlade, kann ich die Library vermutlich nicht einfach nach MinGW kopieren (das Problem hatte ich auch schon mit gdi+).

In kurz: Gibt es irgendeine Möglichkeit WinHTTP mit MinGW/GCC++ in 32bit zu verwenden und wenn ja, gibt es das auch in 64bit für MinGW64?
 
Hi.

MinGWs GCC ist in der Lage direkt gegen DLLs zu linken.

Kopiere einfach die Funktionsdefinitionen die du brauchst aus dem MSDN falls du keine WinHTTP.h Datei hast.

Gib die DLL direkt bei den Linker Optionen an.

Gruß
 
Ähm ..... Bahnhof?
Ich weiss ja, dass ich Anfänger bin, aber das ist jetzt so weit über meine Kenntnisse, da verstehe ich nicht mal den Ansatz.

Wenn ich WinInet verwende, include ich wininet.h und gebe dem Linker die libwininet.a mit, wobei beides Bestandteil von MinGW ist, da habe ich automatisch die richtige Version.

Will ich WinHTTP verwenden, dann habe ich weder eine WinHTTP.h noch eine libwinhttp.a.
Selbst WENN ich wüsste, wie die passende Windows.dll heisst, und wo im System ich sie finde, dann funktioniert das immer noch nicht, weil ich vorm linken erstmal rausfinden müsste, welches OS der User hat.
Z.B.
Unter Windows7 64 bit liegt die .dll unter
c:\Windows\System32\winhttp.dll.
Für 32bit Anwendungen liegt sie unter
c:\Windows\SysWOW64\winhttp.dll.
Unter XP oder Vista oder Win7 32bit gibt es SysWOW64 nicht und sie liegt immer unter
c:\Windows\System32\winhttp.dll.

Wie soll ich denn da sicher stellen, dass immer die richtige .dll geladen wird?

Und wie soll ich anstellen "Kopiere einfach die Funktionsdefinitionen die du brauchst aus dem MSDN"?
MSDN ist ein Nachschlagewerk, da steht der Quellcode der .dll nicht drin, abgesehen davon, dass ich nicht mal wüsste welche Funktionsdefinitionen ich brauche, denn Gott allein weiss, was die .dll ihrerseits wieder an includes drin hat und welche (undefinierten) Unterfunktionen von Funktionen wie HTTPSendRequest() verwendet werden.

Obendrein ist das Web voll von Meldungen, wo User die winhttp.dll gar nicht erst haben, wie soll ich da sicher stellen, dass mein Programm beim User läuft?
 
Ähm ..... Bahnhof?
Ich weiss ja, dass ich Anfänger bin, aber das ist jetzt so weit über meine Kenntnisse, da verstehe ich nicht mal den Ansatz.

Wenn ich WinInet verwende, include ich wininet.h und gebe dem Linker die libwininet.a mit, wobei beides Bestandteil von MinGW ist, da habe ich automatisch die richtige Version.

Will ich WinHTTP verwenden, dann habe ich weder eine WinHTTP.h noch eine libwinhttp.a.
Selbst WENN ich wüsste, wie die passende Windows.dll heisst
Das steht im MSDN. Die WinHTTP DLL heißt immer Winhttp.dll.
und wo im System ich sie finde, dann funktioniert das immer noch nicht, weil ich vorm linken erstmal rausfinden müsste, welches OS der User hat.
Wenn du eine 64 Bit Anwendung erstellst, mußt du gegen die 64bit DLL linken, ansonsten gegen die 32bit DLL. D.h. du mußt auf deinem System wissen wo die Bibliothek liegt gegen die du linken möchtest.

Auf dem Benutzer-PC kümmert sich das Betriebssystem um das Laden der DLL automatisch.
Und wie soll ich anstellen "Kopiere einfach die Funktionsdefinitionen die du brauchst aus dem MSDN"?
MSDN ist ein Nachschlagewerk, da steht der Quellcode der .dll nicht drin, abgesehen davon, dass ich nicht mal wüsste welche Funktionsdefinitionen ich brauche, denn Gott allein weiss, was die .dll ihrerseits wieder an includes drin hat und welche (undefinierten) Unterfunktionen von Funktionen wie HTTPSendRequest() verwendet werden.
Die Funktionen die du verwenden willst mußt du deklarieren. Kopiere einfach die Prototypen / Funktionsdeklarationen aus dem MSDN.
Obendrein ist das Web voll von Meldungen, wo User die winhttp.dll gar nicht erst haben, wie soll ich da sicher stellen, dass mein Programm beim User läuft?
Nun, das ist dann das Problem des Benutzers... ;) Laut MSDN ist die WinHTTP.dll teil des Betriebssystems.

Gruß
 
Zuletzt bearbeitet:
Zurück