0

如果我尝试汇编以下代码,则会收到 A2006 错误(错误 A2006:未定义符号:StrCmp)。

这是我的代码:

.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

我是汇编程序的完整n00b,我正在努力学习它。;)

伊万

4

1 回答 1

1

你没有提到调用 StdOut 的任何错误,所以我假设这个是组装的。在这种情况下,错误应该正是它所说的:在您列出的包含文件中无法识别 StrCmp。因此,只需确保您的其中一个包含实际上定义了 StrCmp (并且由于我不记得 MASM 默认为哪种模式,因此请注意区分大小写以确保安全)。

由于您使用的是 stdcall,因此您的调用将生成对 _StrCmp@8 之类的外部引用(@8 因为有两个参数,每个参数为 4 个字节)。因此,您还需要在其中一个 includelib 库中包含此修饰名称。不过,这不是您看到的问题,因为此错误是 masm 错误而不是链接器错误。

于 2010-04-05T12:01:15.183 回答