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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top