我正在开发一个项目,我想使用程序集实现一些功能,32位和64位,我的设置是Visual Studio 2015社区和使用MSVC。我试图从我的cpp代码调用程序集中实现的函数。
我的汇编文件和函数如下所示:
IFDEF RAX
ELSE
.model flat, stdcall
ENDIF
.code
PUBLIC CheckParity
; bool CheckParity(size_t Result)
CheckParity PROC
IFDEF RAX
mov rax, 0
add rcx, 0
jnp jmp_over
mov rax, 1
ELSE
mov eax, 0
pop ecx
add ecx, 0
jnp jmp_over
mov eax, 1
ENDIF
jmp_over:
ret
CheckParity ENDP
END
标题中的声明:
extern "C" bool CheckParity(size_t Result);
调用该函数:
CheckParity(SomeValue);
编译项目时遇到的错误:
Error LNK2019 unresolved external symbol _CheckParity referenced in function "public: virtual long __thiscall Emulation::_ASE_EMULATION_INSTANCE_FILE::ExecuteInstruction(struct Memory::_ASE_MEMORY_ACCESS *,unsigned char *,unsigned int)" (?ExecuteInstruction@_ASE_EMULATION_INSTANCE_FILE@Emulation@@UAEJPAU_ASE_MEMORY_ACCESS@Memory@@PAEI@Z) ase C:\Users\Alien\documents\visual studio 2015\Projects\xed2_test\ase\ASEEmulation.obj 1
这里奇怪的是这个编译和链接没有64位错误。 只有在链接32位时才会出现问题。
我已阅读并尝试了以下帖子但没有运气: