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

Micro_and_Macro 43 Messages postés dimanche 26 mars 2006Date d'inscription 1 août 2009 Dernière intervention - 9 mars 2007 à 19:41 - Dernière réponse : Micro_and_Macro 43 Messages postés dimanche 26 mars 2006Date d'inscription 1 août 2009 Dernière intervention
- 14 mars 2007 à 23:05
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>
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Micro_and_Macro 43 Messages postés dimanche 26 mars 2006Date d'inscription 1 août 2009 Dernière intervention - 14 mars 2007 à 23:05
3
Merci
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>

Merci Micro_and_Macro 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de Micro_and_Macro
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 10 mars 2007 à 01:30
0
Merci
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++
Commenter la réponse de BruNews
Micro_and_Macro 43 Messages postés dimanche 26 mars 2006Date d'inscription 1 août 2009 Dernière intervention - 10 mars 2007 à 10:53
0
Merci
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>
Commenter la réponse de Micro_and_Macro
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 10 mars 2007 à 11:12
0
Merci
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++
Commenter la réponse de BruNews
Micro_and_Macro 43 Messages postés dimanche 26 mars 2006Date d'inscription 1 août 2009 Dernière intervention - 10 mars 2007 à 13:01
0
Merci
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>
Commenter la réponse de Micro_and_Macro
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 10 mars 2007 à 14:06
0
Merci
On verra la suite à mon retour de Seattle.
Bonne semaine.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Micro_and_Macro 43 Messages postés dimanche 26 mars 2006Date d'inscription 1 août 2009 Dernière intervention - 10 mars 2007 à 14:08
0
Merci
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>
Commenter la réponse de Micro_and_Macro
Micro_and_Macro 43 Messages postés dimanche 26 mars 2006Date d'inscription 1 août 2009 Dernière intervention - 10 mars 2007 à 14:13
0
Merci
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>
Commenter la réponse de Micro_and_Macro
Guilou34 142 Messages postés mercredi 5 avril 2006Date d'inscription 29 janvier 2016 Dernière intervention - 12 mars 2007 à 15:12
0
Merci
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






 
Commenter la réponse de Guilou34
Micro_and_Macro 43 Messages postés dimanche 26 mars 2006Date d'inscription 1 août 2009 Dernière intervention - 12 mars 2007 à 17:00
0
Merci
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>
Commenter la réponse de Micro_and_Macro
Micro_and_Macro 43 Messages postés dimanche 26 mars 2006Date d'inscription 1 août 2009 Dernière intervention - 12 mars 2007 à 17:05
0
Merci
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>
Commenter la réponse de Micro_and_Macro
Guilou34 142 Messages postés mercredi 5 avril 2006Date d'inscription 29 janvier 2016 Dernière intervention - 13 mars 2007 à 00:17
0
Merci
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   






 
 
 
Commenter la réponse de Guilou34
Micro_and_Macro 43 Messages postés dimanche 26 mars 2006Date d'inscription 1 août 2009 Dernière intervention - 13 mars 2007 à 07:58
0
Merci
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>
Commenter la réponse de Micro_and_Macro
Micro_and_Macro 43 Messages postés dimanche 26 mars 2006Date d'inscription 1 août 2009 Dernière intervention - 13 mars 2007 à 22:20
0
Merci
Si importer statiquement importe à la compilation,alors c'est possible...mais ça ne fonctionne pas..

 

<center> 

</center>
Commenter la réponse de Micro_and_Macro

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.