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 に答える