У меня есть DLL библиотека. Вот ее код:
#include <windows.h>
#include <iostream>
using namespace std;
__declspec(dllexport) void dummy()
{
cout << "I am program";
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
cout << "hello,world!\n";
}
if (fdwReason == DLL_PROCESS_DETACH)
{
cout << "good-bye,world!\n";
}
}
Также есть обычный exe файл, который пишет
Hello, World!
. Я заставил его подключать dll с помощью hiew32 (изменил секцию import). Но когда я запускаю exe вылезает эта ошибка:
Точка входа в процедуру dummy не найдена в библиотеке DLL
C:\Users\user\source\repos\project\release\HelloWorld.exe
Может кто знает в чем проблема?
Во время связывания ищется имя dummy
, но не находит, потому что оно у вас декорировано в стиле С++. Уберите декорирование добавлением extern "C"
extern "C" __declspec(dllexport) void dummy()
UPD: еще стоит убедиться, что у вас стоит правильное соглашение о вызове. По умолчанию это __cdecl
.
Подробнее о декорировании имен вы можете почитать тут, или можно просто набрать в гугле "name mangling".
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
пытаюсь учить сетевое программирование, но пока слабо получаетсяЕсли с TCP или UDP вопрос не возникает, то с raw не могу разобраться