Как заставить VC ++ исказить название C ++ Builder? - PullRequest
0 голосов
/ 18 апреля 2011

Можно ли экспортировать функцию из DLL C ++ Builder с конкретным искаженным именем?
Я пытаюсь создать DLL C ++ Builder для замены существующей VC++DLL.Проблема в том, что приложение, которое использует DLL, ожидает, что одна из функций будет иметь определенное искаженное имя.

То есть он ожидает вызова функции:

"?_FUNCTIONNAME_@@YAHPAU_PARAM1_@@PAU_PARAM2_@@@Z"

Конечно, я могу экспортировать функцию из моей DLL с искаженным именем, но CodeGear настаивает на использовании своей собственной схемы искажения имен.

Можно ли заставить C ++ Builder:

  1. Использовать определенное искаженное имя для функции?

    или

  2. Использовать преобразование имен VC ++ для определенной функции?

Обратите внимание, что я хочу изменить преобразование только для определенной функции, а не для всех функций в DLL.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

Используйте файл .def, чтобы указать собственное имя для экспортируемой функции.

2 голосов
/ 18 апреля 2011

Искажение имен - это только один из многих аспектов ABI.И это факт, было бы легче стандартизировать.Компиляторы целенаправленно используют разные искажения имен, когда используют разные ABI для предотвращения связывания несовместимых объектов.

Одна вещь, которую вы можете попробовать для данной функции, - пометить ее extern "C", тогда она будет использовать вызывающийусловное обозначение C и одинаковые искажения (обычно вообще никакого искажения или только начальные _).Очевидно, что это не решит другие проблемы (обработка исключений, точное содержание vtbls, какие регистры используются для передачи параметров, точное определение стандартной библиотеки, ...)

...