Как отключить искажение имен в C ++ 7.1? :(

У меня есть код библиотеки, который написан на VS 2003, C ++ 7.1

Мне удалось скомпилировать его в VS 2010. Теперь мне нужно скомпилировать его и в VS2003.

Проблема в том, что я не могу предотвратить искажение имени VS2003!

я использовал __declspec (dllexport) __stdcall перед именем функции и я также положил коды в блоке «C».

Я все еще получаю искаженные имена функций при компиляции в VS 20003. Мне не нужен файл .def, когда я использую __declspec (dllexport), верно?

хи это код:

extern "C"{

void __declspec(dllexport) __stdcall FreeMyObject(MyObjectHandle pObj)
{
delete pObj;
}
}

Также «Callin Convention» это __cdecl (/ Gd)

Почему я получаю искаженные имена функций? Есть ли какие-либо параметры, которые мне нужно установить в опции компилятора?

0

Решение

Ключевое слово _stdcall, вместе с _cdecl, _thiscallи другие — все соглашения о вызовах, определяющие, как компилятор обрабатывает нажатия и извлечения аргументов и возвращаемого значения. Имена функций, созданные с помощью _stdcall (по крайней мере, в Visual Studio), «оформляются» при экспорте. Если вы хотите найти экспортированное имя функции, вы можете использовать функцию командной строки Visual Studio DUMPBIN /EXPORTS "DLL file location", Ваше имя функции, вероятно, будет выглядеть примерно так: _FreeMyObject@(some number), Вы также можете использовать файл .def и определить имя самостоятельно, но я лично считаю, что это боль.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]