从cpp调用masm函数

时间:2016-12-17 18:09:05

标签: c++ linker masm

我正在开发一个项目,我想使用程序集实现一些功能,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位时才会出现问题。

我已阅读并尝试了以下帖子但没有运气:

Calling a library made in MASM to C or C++

Calling An Asm Function From C

0 个答案:

没有答案