Перефразирую : простое враг хорошего
Все немогу узнать об активности USB. Прошлый мой пример сообщает обо всех изменениях подрят, хотелось бы разграничивать по собщениям: DBT_DEVICEARRIVAL и DBT_DEVICEREMOVECOMPLETE. Написал .Dll с функцией:
#include "stdafx.h"
#include "tchar.h"
#include <Dbt.h>
#include <setupapi.h>
extern __declspec(dllexport)LRESULT CALLBACK Function(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR) lParam;
switch (uiMsg)
{
case WM_DEVICECHANGE:
{
switch (wParam)
{
case DBT_DEVICEARRIVAL:
MessageBox( hWnd,_T("A device has been inserted."), _T("USB Notice"), MB_OK);
break;
case DBT_DEVICEREMOVECOMPLETE:
MessageBox( hWnd, _T("A device has been removed."), _T("USB Notice"), MB_OK);
break;
}
default:
return DefWindowProc(hWnd, uiMsg, wParam, lParam);
break;
}
}
return 0;
}
Вызываю из консольного приложения так:
void (*pFunction)(HWND, UINT, WPARAM, LPARAM);
(FARPROC &)pFunction=GetProcAddress(hHookDll,"?Function@@YGJPAUHWND__@@IIJ@Z");
if (!pFunction)
{
std::cout<<"Oshibka podkluchenia .DLL adres funkcii ne poluchen"<<std::endl;
FreeLibrary(hHookDll);
_getch();
return 0;
}
.
.
.
CreateWindow(_T("Message"),0,0,0,0,0,0,0,0,0,0);
MSG msgDet;
msgDet.hwnd=hwnd;
while(GetMessage(&msgDet,0,0,0))
{
pFunction(msgDet.hwnd,msgDet.message, msgDet.wParam,msgDet.lParam);
}
Вот как ругается:
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
Если кто-нибудь знает в чем может быть проблема поскажите пожалуйста. Благодарю!