2011-06-02 78 views
2

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

但是,我发现生成的所有过程名称已经以装饰形式出现。此外,MASM将再次进行自己的名字装饰。所以,如果我汇编我的版本,而没有先不手动修改编译器生成的过程名称,我会得到一个链接器错误,因为函数名称不匹配。

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

+0

问题其实无关汇编? – 2011-06-02 13:23:19

+0

不要忘记大多数编译器支持内联汇编。这可能会让你不需要担心C++和汇编器之间的接口 – Jay 2011-06-02 14:05:10

+0

不行,内联汇编不再是一个好选择,除非不需要担心将其升级到x64。 x64不支持内联汇编,并且对旧代码造成很大麻烦。 – JavaMan 2011-06-02 15:11:54

回答

1

声明函数extern "C"应导致生成的汇编程序显示您应该在汇编程序中使用的名称。不要忘记在头文件中使用extern "C",稍后将其声明为C++。

+0

我试过外部“C”。正如另一个答复已经指出的那样,生成的名字只有一个前导_。但是直接使用这个名字将无济于事,因为MASM试图再次做自己的装饰。我想避免手动编辑生成的名称。 – JavaMan 2011-06-02 13:33:11

+0

我对MASM并不熟悉,所以我不能说,但如果没有办法可以用'extern“C''生成你的名字,那么你就有一个真正的问题。 – 2011-06-02 14:57:33

1

你可以声明你的函数为extern "C"。这样一来,它会在大多数名称前得到一个下划线:

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

将成为

_foo