Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;函数调用汇编模块 我想在汇编中编写一个定制的模块,并让我的C++函数调用它。我不想从头开始,而是想用C编写“草稿”,让编译器生成一个蓝图汇编源代码,即/FA编译器选项生成的清单文件_C++_Masm_Name Decoration - Fatal编程技术网

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

C++;函数调用汇编模块 我想在汇编中编写一个定制的模块,并让我的C++函数调用它。我不想从头开始,而是想用C编写“草稿”,让编译器生成一个蓝图汇编源代码,即/FA编译器选项生成的清单文件,c++,masm,name-decoration,C++,Masm,Name Decoration,但是,我发现生成的所有过程名称都已采用修饰形式。此外,MASM将再次进行自己的名称装饰。因此,如果我组装我的版本而不首先手动取消修饰编译器生成的过程名,我将得到一个链接器错误,因为函数名不匹配 有可能防止这种重复的名称装饰吗 声明函数extern“C”将导致生成的汇编程序显示您应该在汇编程序中使用的名称。不要忘了在代码中把它定义为代码>外部“C”/代码>,它声明C++为“代码>外部”C”/代码>。这样,它最多只能在名称前加下划线: extern "C"{ void foo(int bla){

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


有可能防止这种重复的名称装饰吗

声明函数
extern“C”
将导致生成的汇编程序显示您应该在汇编程序中使用的名称。不要忘了在代码中把它定义为代码>外部“C”/代码>,它声明C++为“代码>外部”C”/代码>。这样,它最多只能在名称前加下划线:

extern "C"{
  void foo(int bla){
  }
}
将成为

_foo

问题真的和汇编无关吗?别忘了大多数编译器都支持内联汇编。这可能会让您在不需要担心C++和汇编程序之间的接口的情况下运行,除非不再关注将其升级到X64,否则联机程序集不再是一个好的选择。x64不支持内联程序集,给旧代码带来了很多麻烦。x64编译器不支持内联程序集,因为它通常不需要,并且会干扰对其余代码的优化。你确定你真的能比编译器做得更好吗?我试过外部“C”。正如另一个回答已经指出的那样,生成的名称只有一个前导ux。但是直接使用这个名字是没有帮助的,因为MASM试图再次做自己的装饰。我想避免手动编辑生成的名称。我不熟悉MASM,所以我不能说,但是如果无法生成使用
extern“C”
获得的名称,那么您就有一个真正的问题。