Помогите с dll (С++)

Тема в разделе "WASM.BEGINNERS", создана пользователем not1, 6 ноя 2009.

  1. not1

    not1 Member

    Публикаций:
    0
    Регистрация:
    6 окт 2009
    Сообщения:
    137
    Привет всем неспящим ))
    помогите разобраться с Dll
    сама dll
    Код (Text):
    1.  #include "stdafx.h"
    2. #include<windows.h>
    3.  
    4. BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
    5. {  return TRUE; }
    6. extern "C"__declspec(dllexport) int add(int a) +
    7. { return a+20; }                                       + <--------это я хочу чтоб dll посчитала и вернула мне результат
    файл с раширением .def
    Код (Text):
    1. LIBRARY "add"<-------------- это строчка грузит функцию или за что отвечает?
    2. EXPORTS
    3.  add @1
    далее идет сам .ехе
    Код (Text):
    1. ...
    2. int main()
    3.  {
    4.   LPCTSTR lp;
    5.   HMODULE hmod;
    6.   lp="ll.dll";
    7.   int (*add)(int);//указатель на функцию из dll
    8.   int a=30;
    9.   int b;   
    10.   hmod=LoadLibrary(lp);
    11.   if(hmod==NULL)
    12.   cout<<"ERROR"<<endl;
    13.   else
    14.   cout<<"Library started"<<endl;
    15.   GetProcAddress(hmod,MAKEINTRESOURCE(1));-----сдесь пытаюсь обратиться к add
    16.   b=add(a); <---------------передать параметры в dll и вернуть их обратно...
    17.   cout<<"from dll a:="<<a<<endl;
    18.   getch();
    19.   return 0;
    ------------------
    все компилируеться только вот вылазеет ошибка при запуске exe ((
    далее обязательно писать файл с раширением ехе?
    Заранее спс
    p.s почему сдесь не так как в Delphi))))))) написал функцию в dll в ехе'шнеке вписал export и пользуйся....
     
  2. not1

    not1 Member

    Публикаций:
    0
    Регистрация:
    6 окт 2009
    Сообщения:
    137
    Вообщем разобрался сам )) надо было в проект включить файл с библиотекой пздц))
    тему delet))
     
  3. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Нет. Это строчка с именем будущей длл. В твоем случае, после компиляции имя длл будет "add"

    Функцию импортируем либо по ординалу, либо по имени.
    Т.е.
    либо импортируешь вот так

    GetProcAddress(hmod, "my_func_name");

    либо так

    GetProcAddress(hmod, (PCHAR)1); //где 1 - имя ординала.

    Вместо этого используй функцию printf
     
  4. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    И еще. Замечание. Перед экспортируемой функцией указывать тип передачи аргументов. _stdcall, _cdecl или _fastcall

    Во первых нагляднее, во вторых позволит избежать непонятных багов с порчей стека
     
  5. not1

    not1 Member

    Публикаций:
    0
    Регистрация:
    6 окт 2009
    Сообщения:
    137
    dyn Окей спс за совет
     
  6. not1

    not1 Member

    Публикаций:
    0
    Регистрация:
    6 окт 2009
    Сообщения:
    137
    вот еще вопрос почему не работает функция SetWindowsHookEx помоги пожайлуста...
    exe
    Код (Text):
    1. extern"C"_declspec(dllimport) LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam, LPARAM lParam);
    2. int main()
    3.  {
    4.    LPCTSTR lp;  
    5.    HMODULE hmod;
    6.    lp="mydll.dll";
    7.    hmod=LoadLibrary(lp);
    8.    if(hmod==NULL)
    9.    MessageBox(0, "Dll unload from procces!", "OK", MB_OK);
    10.    GetProcAddress(hmod,"MouseProc");
    11.    SetWindowsHookEx(WH_MOUSE,MouseProc,hmod,0);
    12.  getch();
    13.  return 0;
    14. }
    dll
    Код (Text):
    1. extern "C"_declspec(dllexport) LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam, LPARAM lParam)
    2. {
    3.    if(nCode<0)
    4.    {
    5.     MessageBox(0, "Dll unload from procces!", "OK", MB_OK);
    6.           return CallNextHookEx(NULL, nCode, wParam, lParam);
    7.    }
    8.  if(lParam>0)
    9.   {
    10.     MessageBox(0, "ddd", "OK", MB_OK);
    11.    }
    12.     return true;
    13. }
    все компилируеться но не работает должно вызывать сообщение от мыши при нажание вылазить месаджбокс