0

试图了解如何链接结构中定义的函数,该函数位于汇编代码中,并试图从 c 中调用它。我认为当我调用该函数时缺少一个步骤,我得到一个未解析的外部符号......

;Assembly.asm
.686p
.mmx
.xmm
.model flat

include Definitions.inc

.code

?Initialize@Foo@@SIXPAUFee@@@Z proc
    jmp $
?Initialize@Foo@@SIXPAUFee@@@Z endp

end



//CFile.c
struct Fee
{
   signed long id; 
}

struct Foo
{
   static void Initialize(Fee *);
}


int startup(Fee * init)
{
  Foo::Initialize(init); //<-- This is unresolved
  return 0;
}
4

1 回答 1

3

您的汇编代码定义了一个函数,其修饰名称解码为

public: static void __fastcall Foo::InitializeCurrentCpu(struct Fee *)

通过 undname.exe 实用程序获得。Foo::InitializeCurrentCpu() 与 Foo::Initialize() 不匹配,名称不匹配。调用约定也没有。

首先用 C++ 编写此代码,然后查看 .map 文件以获取正确的修饰名称。或者用 extern "C" 声明函数来抑制 C++ 修饰。

于 2009-12-13T15:55:08.590 回答