1

Bonjour tout le monde hehe

Je programme en C avec MSVC++ 6.0.

J'aimerais pouvoir inclure la possibilité de lire des fichiers PNG à mon application, mais en cherchant sur internet tout ce que j'ai trouvé ce sont des librairies avec lesquelles je dois linker mon programme.

Le but serait que si l'utilisateur veut utiliser les PNG, il télécharge une éventuelle DLL qu'il installe (de préférence dans \system32, pas dans le dossier de l'appli; elle ne sera pas redistribuée avec).
Mais si elle n'existe pas, je n'aimerais pas recevoir un message du style "Cette application est liée à une extension manquante: *png.dll" et que l'appli quitte automatiquement. En gros, je tente de la charger et si c'est bon j'active le support PNG et sinon c'est pas grave, on fait avec le support BMP uniquement...

Est-ce que vous connaissez une lib ou un code source qui permette de faire ça?

Merci d'avance smile
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

2

Tu peux sûrement recompiler en DLL une des librairies que tu as trouvées.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

3

dans les dll "standard" de windows, il y a rien qui permet de lire les images ?
genre dans gdi ou ce genre de trucs ?
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

4

gdi ne permet pas de lire les png.

pour ton truc, je pense qu'il est mieux pour toi de faire un système de plugins, et pour le png, utiliser la libpng

5

Ok merci beaucoup. LibPNG peut être chargée dynamiquement (genre LoadLibrary)?
Là je viens de tester avec GDI+, j'arrive à le faire fonctionner mais bon il faut que je linke avec gdiplus.lib qui déclare les fonctions dans gdiplus.dll, donc si je mets sur un PC qui n'a WinXP ou GDIPlus, ça va faire une erreur sad
J'ai plein d'appels comme ça:
GpStatus WINGDIPAPI GdipCreatePath(GpFillMode brushMode, GpPath **path);
(WINGDIPAPI = __stdcall)
Est-ce que je peux les détourner pour ne pas avoir à linker à la librairie (et donc pas d'erreur au lancement)? En fait tout ce qui m'embête c'est cette erreur si la DLL n'existe pas, il n'y a pas moyen de l'éviter?
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

6

*toutes* les dll peuvent normalement etre chargé dynamiquement via LoadLibrary..
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

7

pkoi normalement ?

8

parceque certaines peuvent etre du bricolage qui fait que si on l'initialise pas correctement elle peuvent ne pas marcher, mais bon rien de méchant normalement
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

9

Je n'ai pas réussi à la transformer en lib dynamique (en fait si, mais ça me prend 2 minutes par fonction à convertir parce que je dois le faire à la main, et y'en a des centaines; j'ai pas vraiment que ça à faire en fait).

J'ai testé une autre méthode, mais je ne sais pas si ça marchera. Voici l'application en test. Si vous avez Windows 2000 ou inférieur, et que vous n'avez pas GDI+, ce serait très sympa de tester le prog et me reporter s'il fonctionne correctement:
Lien - 112 ko - Clic droit, enregister sous
Voici ce que vous pouvez me reporter:
1) L'application démarre-t-elle sous Win98/Me/2000? Si non, quel est le message d'erreur?
2) Les contrôles sont-ils affichés correctement (style classique, bien sûr)?
3) Si vous n'avez pas GDI+, l'application fonctionne-t-elle aussi? (elle devrait démarrer mais simplement ne pas proposer les PNG dans la liste des images à charger).

Merci d'avance infiniment à ceux qui pourront tester.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

10

godzil :
parceque certaines peuvent etre du bricolage qui fait que si on l'initialise pas correctement elle peuvent ne pas marcher, mais bon rien de méchant normalement

Notamment, si la librairie utilise du thread-local storage avec des variables déclarées en __declspec(thread), on ne peut pas la chager avec LoadLibrary().


Par contre, il me semble que GDI+ est en C++, et que les classes sont plutôt difficiles à utiliser avec LoadLibrary()/GetProcAddress(). Dans ce cas, on peut toujours faire une DLL qui est linkée avec gdiplus.lib, et charger ladite DLL avec LoadLibrary() : si gdiplus.dll n'est pas trouvée, la DLL qui l'utilise ne pourra pas s'initialiser, et LoadLibrary() renverra NULL.
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.