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