Show / Hide Table of Contents

MSDN.WhiteKnight - Stack Overflow answers

Ответ на "Регистрация DLL библиотеки"

Answer 961448

Link

Макрос STDAPI разворачивается в extern "C" HRESULT __stdcall, т.е. он сам по себе не задает экспорт функции из DLL. Чтобы функция экспортировалась, достаточно добавить __declspec(dllexport), но для regsvr32 это не поможет, так как при __stdcall функция по умолчанию экспортируется с декорированным именем, а regsvr32 ожидает недекорированное. Для экспорта по недекорированному имени можно использовать либо def-файл, либо параметр компоновщика export (который можно задать в коде директивой pragma).

Декорированное имя для функции без аргументов имеет вид _DllRegisterServer@0 - его легко получить командой dumpbin /exports. Тогда код для экспорта DllRegisterServer будет выглядеть так:

#pragma comment(linker, "/export:DllRegisterServer=_DllRegisterServer@0")
STDAPI DllRegisterServer(void)
{
    return 0;
}

Content is retrieved from StackExchange API.

Auto-generated by ruso-archive tools.

Back to top Stack Overflow answers (published from sources in GitHub repository). Copyright (c) 2020, MSDN.WhiteKnight. Content licensed under BSD 3-Clause License.
Generated by DocFX