Привет всем неспящим )) помогите разобраться с Dll сама dll Код (Text): #include "stdafx.h" #include<windows.h> BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; } extern "C"__declspec(dllexport) int add(int a) + { return a+20; } + <--------это я хочу чтоб dll посчитала и вернула мне результат файл с раширением .def Код (Text): LIBRARY "add"<-------------- это строчка грузит функцию или за что отвечает? EXPORTS add @1 далее идет сам .ехе Код (Text): ... int main() { LPCTSTR lp; HMODULE hmod; lp="ll.dll"; int (*add)(int);//указатель на функцию из dll int a=30; int b; hmod=LoadLibrary(lp); if(hmod==NULL) cout<<"ERROR"<<endl; else cout<<"Library started"<<endl; GetProcAddress(hmod,MAKEINTRESOURCE(1));-----сдесь пытаюсь обратиться к add b=add(a); <---------------передать параметры в dll и вернуть их обратно... cout<<"from dll a:="<<a<<endl; getch(); return 0; ------------------ все компилируеться только вот вылазеет ошибка при запуске exe (( далее обязательно писать файл с раширением ехе? Заранее спс p.s почему сдесь не так как в Delphi))))))) написал функцию в dll в ехе'шнеке вписал export и пользуйся....
Нет. Это строчка с именем будущей длл. В твоем случае, после компиляции имя длл будет "add" Функцию импортируем либо по ординалу, либо по имени. Т.е. либо импортируешь вот так GetProcAddress(hmod, "my_func_name"); либо так GetProcAddress(hmod, (PCHAR)1); //где 1 - имя ординала. Вместо этого используй функцию printf
И еще. Замечание. Перед экспортируемой функцией указывать тип передачи аргументов. _stdcall, _cdecl или _fastcall Во первых нагляднее, во вторых позволит избежать непонятных багов с порчей стека
вот еще вопрос почему не работает функция SetWindowsHookEx помоги пожайлуста... exe Код (Text): extern"C"_declspec(dllimport) LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam, LPARAM lParam); int main() { LPCTSTR lp; HMODULE hmod; lp="mydll.dll"; hmod=LoadLibrary(lp); if(hmod==NULL) MessageBox(0, "Dll unload from procces!", "OK", MB_OK); GetProcAddress(hmod,"MouseProc"); SetWindowsHookEx(WH_MOUSE,MouseProc,hmod,0); getch(); return 0; } dll Код (Text): extern "C"_declspec(dllexport) LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam, LPARAM lParam) { if(nCode<0) { MessageBox(0, "Dll unload from procces!", "OK", MB_OK); return CallNextHookEx(NULL, nCode, wParam, lParam); } if(lParam>0) { MessageBox(0, "ddd", "OK", MB_OK); } return true; } все компилируеться но не работает должно вызывать сообщение от мыши при нажание вылазить месаджбокс