MASM STRCMP غير محدد؟
-
23-09-2019 - |
سؤال
إذا حاولت تجميع الكود التالي ، أحصل على خطأ 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 كاملة في Assembler ، وأحاول تعلم ذلك. ؛)
إيفان
المحلول
لا تذكر أي خطأ على stdout Invoke ، لذلك أفترض أن هذا واحد يجمع. في هذه الحالة ، يجب أن يكون الخطأ هو ما يقوله بالضبط: لم يتم التعرف على STRCMP في الملفات التي أدرجتها. لذا ، فقط تأكد من أن أحدهم يتضمنون بالفعل يعرّف STRCMP (وبما أنني لا أتذكر ما هو وضع MASM الافتراضي ، فإن احترام حساسية الحالة على الجانب الآمن).
نظرًا لأنك تستخدم STDCALL ، فإن استدعاءك سوف يكون مرجعًا خارجيًا إلى شيء مثل _strcmp@8 (@8 لأن هناك parms ، كل منها 4 بايت). لذلك ستحتاج أيضًا إلى وجود هذا الاسم المزين في أحد libs includelib. ليست هذه هي المشكلة التي تراها ، لأن هذا الخطأ هو Masm بدلاً من أحد الرابط.