MASM StrCmp Undefined?
-
23-09-2019 - |
Question
Si je tente de monter le code suivant, je reçois une erreur de A2006 (erreur A2006: symbole non défini: StrCmp).
Voici mon code:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\stdlib.lib
includelib \masm32\lib\user32.lib
.data
YvanSoftware db "(c) YvanSoftware - ALL RIGHTS RESERVED", 13 ,10 ,0
EnterYourName db "Please enter your name: ", 0
CRLF db 13,10,0
TheHolyMan db "Yvan", 0
Seriously db "Seriously? You're the MAN!", 13,10,0
LoserName db "What a loser name.", 13,10
.data?
buffer db 100 dup(?)
.code
start:
invoke StdOut,addr YvanSoftware
invoke StdOut, addr EnterYourName
invoke StdIn, addr buffer, 100
invoke StdOut, addr CRLF
invoke StrCmp,addr buffer, addr TheHolyMan ;error fires here
je HolyMan
IfNotHolyMan:
invoke StdOut, addr LoserName
jmp EndIfHolyMan
HolyMan:
invoke StdOut, addr Seriously
jmp EndIfHolyMan
EndIfHolyMan:
invoke ExitProcess,0
END start
Je suis un n00b complet à l'assembleur, et je suis en train de l'apprendre. ;)
Yvan
La solution
Vous ne mentionnez aucune erreur sur l'invocation StdOut, donc je suppose que celui-ci rassemble. Dans ce cas, l'erreur doit être exactement ce qu'il dit: StrCmp ne reconnaît pas dans les fichiers inclus que vous avez énumérés. Il suffit donc de vous assurer que l'un de vos définit comprend en fait StrCmp (et que je ne me souviens pas ce que le mode par défaut MASM pour, le respect cas sensitivy d'être du bon côté).
Depuis que vous utilisez stdcall, votre Invoke sera gen une référence externe à quelque chose comme _StrCmp @ 8 (@ 8 parce qu'il ya deux parms, chacun étant de 4 octets). Ainsi, vous aurez également besoin d'avoir ce nom décoré présente dans l'un des libs includelib. Ce n'est pas le problème que vous voyez bien que, comme cette erreur est une masm un plutôt qu'un éditeur de liens.