Модуль сборки вызова функций C ++ - PullRequest
2 голосов
/ 02 июня 2011

Я хочу написать собственный модуль в сборке и заставить его функции C ++ вызывать его.Вместо того, чтобы начинать с нуля, я хотел бы написать «черновик» на C и позволить компилятору сгенерировать предварительный сборочный файл сборки, созданный параметром компилятора / FA.

Однако я обнаружил, что все сгенерированные имена процедур уже оформлены.Кроме того, MASM снова выполнит оформление своего имени.Поэтому, если я сначала соберу свою версию, не декорировав имя процедуры, сгенерированной компилятором, сначала я получу ошибку компоновщика, так как имена функций не будут совпадать.

Возможно ли предотвратить такой тип украшения дублированного имени?

Ответы [ 2 ]

1 голос
/ 02 июня 2011

Вы можете объявить свою функцию как extern "C".Таким образом, он получит подчеркивание перед именем:

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

станет

_foo
1 голос
/ 02 июня 2011

Объявление функции extern "C" должно привести к тому, что сгенерированный ассемблер отобразит имя, которое вы должны использовать в ассемблере.Только не забудьте сделать его extern "C" в заголовке, который позже объявляет его C ++.

...