MASM StrCmp Не определено? - PullRequest
       10

MASM StrCmp Не определено?

0 голосов
/ 30 марта 2010

Если я пытаюсь собрать следующий код, я получаю ошибку 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 на ассемблере, и я пытаюсь выучить это. ;)

Yvan

1 Ответ

1 голос
/ 05 апреля 2010

Вы не упомянули ни одной ошибки при вызове StdOut, поэтому я предполагаю, что он собирается. В этом случае ошибка должна быть именно такой: «StrCmp» не распознается во включенных вами файлах. Так что просто убедитесь, что одно из ваших включений на самом деле определяет StrCmp (и так как я не помню, какой режим по умолчанию используется MASM, соблюдайте регистр символов, чтобы быть на безопасной стороне).

Поскольку вы используете stdcall, ваш вызов будет генерировать внешнюю ссылку на что-то вроде _StrCmp @ 8 (@ 8, потому что есть два параметра, каждый из которых по 4 байта). Таким образом, вам также нужно, чтобы это украшенное имя присутствовало в одной из библиотек includelib. Это не та проблема, с которой вы сталкиваетесь, поскольку эта ошибка является ошибочной, а не компоновочной.

...