Utilisation d'une Librairie perso avec MASM32 [Résolu]

Signaler
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009
-
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009
-
Bonsoir à  tous,
j'ai créé une  librairie à partir d'une DLL BMP2JPG.dll(de vbfrance) à l'aide de cette url http://win32assembly.online.fr/importlib.html,
selon la première methode permetant d'executer les fonctions avec "Call".

A la compilation, j'obtient cette erreur (error A2006: undefined symbol : BMP2JPGpourVBFrance)
BMP2JPG etant l'une des fonctions de la lib.

Je précise  que la lib est incluse dans le  même répertoire que les  autres libs comme ceci :  includelib c:\masm32\lib\BMP2JPG.lib

Quelqu'un a-til déjà rencontré ce problème ?
Faut-il un fichier .inc allant de paire pour la déclaration des fonctions? (j'en doute)

Voilà merci d'avance(l'enjeu est vraiment important pour moi :p)

PS:  Enfin surtout Brunews














<center> 

</center>

14 réponses

Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

Comme Monsieur le chat noir prend des vacances (merités?) :p
je dois "auto-resoluter" le post..





Ayant réussi en appliquant la seconde methode,celle qui permait d'appeler les fonction de la lib avec "invoke"



Je posterai un ptit prog qui fera la capture d'écran en bitmap puis la convertira en jpeg
avec un appel statique de la DLL à la fin de la semaine, vu que personne ne semble l'avoir déjà fait,ça pourrait servir




 


<center> 

</center>
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Si tu mets l'import lib et dessous le proto de la fonction en haut du fichier asm, aucune raison que le call soit refusé.

ciao...
BruNews, MVP VC++
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

BMP2JPGpourVBFrance PROTO :DWORD,:DWORD,:DWORD
error LNK2001: unresolved external symbol _BMP2JPGpourVBFrance@12

Le problème étant que la fonction prend 3 paramètres en entrée qui n'apparaissent pas dans le.def dont voici un extrait ?SetFrame@CxImage@@QAEXJ@Z
?SetFrameDelay@CxImage@@QAEXK@Z
?SetJpegQuality@CxImage@@QAEXE@Z
?SetOffset@CxImage@@QAEXJJ@Z
?SetProgress@CxImage@@QAEXJ@Z
?SetTransColor@CxImage@@QAEXUtagRGBQUAD@@@Z
?SetTransIndex@CxImage@@QAEXJ@Z
?Size@CxIOFile@@UAEJXZ
?Stretch@CxImage@@QAEJPAUHDC__@@ABUtagRECT@@@Z
?Tell@CxIOFile@@UAEJXZ
 ?Write@CxIOFile@@UAEIPBXII@Z
BMP2BMPAvecRedimpourVBFrance
BMP2GIFAvecRedimpourVBFrance
 BMP2GIFpourVBFrance
 BMP2JPGAvecRedimpourVBFrance
 BMP2JPGpourVBFrance





Voilà,je vais essayer avec une autre dll pour voir si le problème persiste







<center> 

</center>
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
FICHIER ASM:
.586
.model flat, stdcall
option casemap :none
option prologue:none
option epilogue:none


;; LES include ICI


.code


LibMain PROC hInstDLL:DWORD, reason:DWORD, unused:DWORD
   mov      eax, 1
   ret      12
LibMain ENDP


BMP2JPGpourVBFrance PROC  param1:DWORD,param2:DWORD,param2:DWORD
  ; TON CODE ICI
  ret    12
BMP2JPGpourVBFrance ENDP
-------------------------
FICHIER DEF:


LIBRARY   NomSeTaDll
EXPORTS
  BMP2JPGpourVBFrance  @1
  ; AUTRES NOMS EXPORTES A SUIVRE

ciao...
BruNews, MVP VC++
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

Ah? et heu.... que mettre dans la procédure si ce n'est :

BMP2JPGpourVBFrance PROC  param1:DWORD,param2:DWORD,param2:DWORD



pushparam3
push param2
push param1
Call BMP2JPGpourVBFrance
ret    12
BMP2JPGpourVBFrance ENDP





.
Et a l'appel se pourrait être:



push 100
push path2
push path1
Call BMP2JPGpourVbfrance



















<center> 

</center>
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
On verra la suite à mon retour de Seattle.
Bonne semaine.

ciao...
BruNews, MVP VC++
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

La capture au format BMP est bonne,mais rien ne se passe...


.386
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc  ; Contient les déclarations de constantes et structures de Win32
include c:\masm32\include\user32.inc ;Déclaration des fonctions de la l'api user32
include c:\masm32\include\wsock32.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\gdi32.inc
include c:\masm32\include\winmm.inc
include c:\masm32\include\advapi32.inc
include c:\masm32\include\shell32.inc
include c:\masm32\include\wininet.inc
include capture.inc

;Bibliothèques api
includelib c:\masm32\lib\kernel32.lib;Support d'API de base pour les noyaux Windows 32 bits (mémoire, disques, processus, taches, modules).
includelib c:\masm32\lib\shell32.lib ;Bibliothèque d'API Shell 32 bits.
includelib c:\masm32\lib\user32.lib ;Bibliothèque pour routines d'interfaces utilisateur (fenêtres, menus, messages, ...).
includelib c:\masm32\lib\gdi32.lib ;Bibliothèque d'API pour le périphérique à interface graphique.
includelib c:\masm32\lib\winmm.lib ;Bibliothèque multimédia Windows (multimédia, son, midi, ...)
includelib c:\masm32\lib\advapi32.lib;Start computer, acceder au registre,activer un service
includelib c:\masm32\lib\wininet.lib
includelib c:\masm32\lib\wsock32.lib  ;api winsocket
includelib c:\masm32\lib\BMP2JPG.lib  ;librairie chantage ;--)))

.data
path1 db ".\screenshot.bmp",0
path2 db ".\screenshot.jpg",0
.code

LibMain PROC hInstDLL:DWORD, reason:DWORD, unused:DWORD
   mov      eax, 1
   ret      12
LibMain ENDP

BMP2JPGpourVBFrance PROC  param1:DWORD,param2:DWORD,param3:DWORD
;;(App.Path & "\image.bmp", App.Path & "\image.jpg", 50)
push param3 ;'qualité réglable de 1 à 100
push  param2;push  offset path1
push param1
Call BMP2JPGpourVBFrance
ret    12
BMP2JPGpourVBFrance ENDP
start:
invoke CapScreen,addr fichier
push 100
push offset path2
push offset path1
Call BMP2JPGpourVBFrance
invoke ExitProcess,0
end start


<center> 

</center>
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

Raaaahhh le baaad,il me reste jusqu'à mercredi pour faire fonctionner cette lib!!!!!
Reviens vite chat noir erudit !! :--))
Moins égoistement bonnes vacances, si tu pars pour le plaisir ^^




<center> 

</center>
Messages postés
142
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
29 janvier 2016
1
Ton appel au secours m’interpelle et je me demande s’il n’y pas  quelque confusion  dans la manière dont tu conçois le problème. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





Si je comprends bien, tu désires modifier une DLL existante,  à l’aide de  LibMain, dans une application Msdos, mais alors pourquoi inclure un ensemble de fonctions, (API etc )  de Windows?  Parce que cette DLL y fait appel? On conçoit bien qu’une DLL se contentant de convertir du BMP en JPG n’a nul besoin d’utiliser l’interface graphique.





Est-ce l’obligation d’employer Masm32 et Windows ?





Enfin, il me semble que BMP2JPGpourVBfrance est utilisé à la fois comme prototype et comme procédure interne à ton module avec un appel récursif. En outre, tu places toi-même les arguments sur la pile sans respecter le prototype et  dans le mauvais ordre (le plus à gauche doit être empilé le premier).  





En t’obligeant à mieux exposer ton  problème, ce sera peut-être comme je l’ai souvent expérimenté, le moyen le plus simple de le résoudre par toi-même.





Amitiés






 
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

Oui alors.. je vais essayer d'être plus clair :)
Est-il possible de ne pas appeler la DLL à chaque fois que je veux convertir une image?
C'est à dire,en créant une libraire qui inclurait cela à la compilation?

 

<center> 

</center>
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

J'ai comme l'impression de devoir faire quelque chose d'impossible ,et comme de toute façon je ne comprend pas bien le sytème des .lib et .inc à la base   :p c'est pas gagné.

<center> 

</center>
Messages postés
142
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
29 janvier 2016
1
Mais c’est précisément la raison d’être d’une procédure ou d’une fonction de faire partie d’une application pour pouvoir  être exécutée plusieurs fois. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>





Dans l’univers MSDOS,  Masm32   produit un fichier de type .OBJ  incomplet s’il fait appel  à  des procédures extérieures (qui sont aussi des fichiers de type .OBJ).





C’est l’éditeur de liens ( Link32 par exemple) qui  créera l’application  exécutable de type .EXE. Encore doit-il savoir où trouver  ces différents  modules. C’est généralement dans un fichier .DEF qu’on lui indique la liste des librairies qu’il devra consulter.






 Avec Windows,  il en va de même mais il existe aussi  des librairies de type DLL ( Dynamic Link  Library )  qui présentent de multiples avantages par rapport aux modules de type OBJ. créés  par l’assembleur. Ainsi, par exemple, si plusieurs applications font appel à la même DLL, Windows n’en  chargera en mémoire  qu’une seule instance qui sera utilisée par toutes les applications.






            Par ailleurs, l’utilité de l’assembleur se pose essentiellement  lorsqu’on travaille en temps réel. Pour ton problème, je n’en vois pas la nécessité sauf dans un but didactique mais alors ton  exemple est-il bien choisi ?






            Désolé, mais il y a chez toi quelques lacunes à combler mais surtout ne désespère





pas.





Amicalement   






 
 
 
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

Oui quelques lacunes théoriques surement,mais en fait c'était plutot clair avant de poster sur différents forum et hum , je reçoit des réponses de toute sortes ...
Ah au fait je travail pas en MS-Dos hein^^,et toutes les lib inclusent de mon prog sont là à cause du copier coller pour l'exemple,rien de grave....Bon ,je ne sais plus quoi penser suite à cette url http://www.developpez.net/forums/showthread.php?t=293758 ou on m'a dit que c'était impossible...

 

<center> 

</center>
Messages postés
43
Date d'inscription
dimanche 26 mars 2006
Statut
Membre
Dernière intervention
1 août 2009

Si importer statiquement importe à la compilation,alors c'est possible...mais ça ne fonctionne pas..

 

<center> 

</center>