искажение имени с файлом определения и внешним "C" - PullRequest
1 голос
/ 15 декабря 2009

Я создаю базовый компонент COM, чтобы можно было потренироваться в их создании.

Я экспортирую DllRegisterServer, DllUnregisterServer, DllGetClassObject и DllCanUnloadNow из файла .def с ключевым словом PRIVATE (я думаю, что Microsoft требует этого).

В любом случае, я указал все 4 функции с помощью внешней буквы "C", и все же я все еще искажаюсь. Вот мой .def:

EXPORTS
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE

Вот искажение из мусорной корзины / ЭКСПОРТ

_DllCanUnloadNow@0
_DllGetClassObject@12
_DllRegisterServer@0
_DllUnregisterServer@0

Я знаю, что extern "C" помогает, потому что я получаю действительно плохое искажение без него, но я думал, что .def с extern "C" должен был избавиться от искажения имени?

Мой компилятор - VC ++ Express 2008. Командная строка компоновщика:

/ OUT: «G: \ Programming \ COM \ BasicMathCOM \ BasicMath \ Release \ BasicMath.dll» / ДОПОЛНИТЕЛЬНО: НЕТ / NOLOGO / DLL / MANIFEST /MANIFESTFILE:"Release\BasicMath.dll.intermediate.manifest "/ MANIFESTUAC . / DYNAMICBASE / NXCOMPAT / MACHINE: X86 / ERRORREPORT: PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib Advapi32.lib *

+ / DEF: BasicMath.def, который я добавил под дополнительными опциями.

Ответы [ 2 ]

1 голос
/ 15 декабря 2009

Извините, я это исправил. Когда я копировал командную строку в свой вопрос, я увидел / DEBUG, хотя я установил конфигурацию выпуска. Я увидел, что «Создать информацию об отладке» был случайно включен, поэтому отключил ее и перекомпилировал. Искажено имя.

Спасибо за вашу помощь.

1 голос
/ 15 декабря 2009

Вы на самом деле используете .def файл?

Можем ли мы увидеть вашу командную строку для компиляции?

...