2

我想在汇编中编写一个自定义模块并让我的 C++ 函数调用它。我不想从头开始,而是想用 C 编写“草稿”,让编译器生成一个蓝图汇编源,即 /FA 编译器选项生成的列表文件。

但是,我发现生成的所有过程名称都已经是修饰形式。此外,MASM将再次进行自己的名称装饰。因此,如果我在不首先手动取消修饰编译器生成的过程名称的情况下组装我的版本,我会收到链接器错误,因为函数名称不匹配。

是否可以防止这种类型的重复名称装饰?

4

2 回答 2

1

声明函数extern "C"应该会导致生成的汇编器显示您应该在汇编器中使用的名称。只是不要忘记将它extern "C"放在稍后将其声明为 C++ 的标头中。

于 2011-06-02T13:18:56.293 回答
1

您可以将您的函数声明为extern "C". 这样,它最多会在名称前加上一个下划线:

extern "C"{
  void foo(int bla){
  }
}

会变成

_foo
于 2011-06-02T13:19:23.313 回答