При попытке регистрации библиотеки выдаёт
Exeption_Search.cpp:
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
extern "C" __declspec(dllexport) void OnConnect()
{
// {5994FCF1-EC8C-48CE-9078-3C4DE11FFD4E}
static const GUID GUID_handler_no_null =
{ 0x5994fcf1, 0xec8c, 0x48ce,{ 0x90, 0x78, 0x3c, 0x4d, 0xe1, 0x1f, 0xfd, 0x4e } };
MessageBox( NULL,
L"Пустое значение",
0,
MB_OK
);
std::cout << "handler_no_null";
}
dllmain.cpp:
#include "stdafx.h"
HINSTANCE g_hInst = NULL;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
STDAPI DllRegisterServer(void)
{
return 0;
}
В интернете подробного и понятного решения проблемы не нашла.
Макрос 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;
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Написал простой сервер с помощью сокетовЕго цель принимать данные от пользователя и отправлять их обратно Клиент я написал в Android Studio, прием-передача...
Как правильно писать аргументы к методу Main? Мой друг изучает java и пишет public static void Main(String args[]), хотя я пишу public static void Main(String[] args) (но на C#)Не можем...