1>lab_2.obj : error LNK2005: _DllMain@12 already defined in dllmain.obj 1> Creating library C:\Users\Ваня\Desktop\lab_2\Debug\lab_2.lib and object C:\Users\Ваня\Desktop\lab_2\Debug\lab_2.exp 1>C:\Users\Ваня\Desktop\lab_2\Debug\lab_2.dll : fatal error LNK1169: one or more multiply defined symbols found
Из-за чего выдает эти ошибки и как их исправить? Код
#include <windows.h>
#include "stdafx.h"
#include "lab_2.h"
#include "targetver.h"
HHOOK SysHook;
HWND Wnd;
HINSTANCE hInst;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
hInst=(HINSTANCE)hModule;
return TRUE;
}
LRESULT CALLBACK SysMsgProc(
int code, // hook code (код ловушки)
WPARAM wParam, // removal flag (флаг)
LPARAM lParam // address of structure with message
// (адрес структуры с сообщением)
)
{
//Передать сообщение другим ловушкам в системе
CallNextHookEx(SysHook, code, wParam, lParam);
//Проверяю сообщение
if (code == HC_ACTION)
{
//Получаю идентификатор окна сгенерировавшего сообщение
Wnd=((tagMSG*)lParam)->hwnd;
//Проверяю тип сообщения.
//Если была нажата левая кнопка мыши
if (((tagMSG*)lParam)->message == WM_RBUTTONDOWN)
{
SendMessage(Wnd, EM_SETPASSWORDCHAR, 0, 0);
InvalidateRect(Wnd, 0, true);
}
}
return 0;
}
///////////////////////////////////////////////////////////////////
DllExport void RunStopHook(bool State, HINSTANCE hInstance)
{
if (true)
SysHook = SetWindowsHookEx(WH_GETMESSAGE, &SysMsgProc, hInst, 0);
else
UnhookWindowsHookEx(SysHook);
}
Второй файл
// Macro for DLL exports in Win32, replaces Win16 __export
// (Макрос для экспорта DLL в Win32 вместо 16-битной версии)
#define DllExport extern "C" __declspec(dllexport)
// Prototype
// (Прототип)
DllExport void RunStopHook(bool State, HINSTANCE hInstance);
Удалил функцию _DllMain, которая была автоматически создана при создании проекта, и все заработало.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем приветСтрадаю от неумения правильно придумывать названия своим классам
Оператор switch реализован таким образом, что после совпадения первого case, выполняются все остальные case, пока не встретится оператор передачи...