MASM & VC++

Тема в разделе "WASM.WIN32", создана пользователем arrrg, 4 сен 2009.

  1. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    Как прицепить .dll библиотеку,написаннную изначально на масме, в VC++ и использовать функции этой библиотеки?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    В чём проблема? Форматы идентичны.
     
  3. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    проблема в том что я не знаю как в VC++ использовать функции,вложенные в .dll
     
  4. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    arrrg
    Библитеку импорта подключать не пробовал?
     
  5. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    еслиб я знал как это делается яб не спрашивал
     
  6. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    если ты насчёт .lib файла,его я прицепил,но получаю ошибку - неразрешённый внешний символ
     
  7. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Код (Text):
    1. HINSTANCE hInst = LoadLibrary("Name.dll");
    2. DWORD addr = GetProcAddress(hInst, "NameFunction");
    потом что-то типа:
    Код (Text):
    1. DWORD (stdcall *)(char *, DWORD, WORD)   FUNC;
    2. FUNC func1 = FUNC(addr);
    Насчет этого лучше смотри <windowsx.h> там есть HANDLE_MSG(...), реализованный как макрос - там написано правильно.
    И теперь можно вызывать func1 как обычную функцию:
    Код (Text):
    1. char * str;
    2. DWORD num;
    3. WORD ret;
    4. DWORD a = func1(str, num, ret);
     
  8. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    кхм кхм
    я спрашивал как прицепить dll к VC++ проэкту, а не к масму
     
  9. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    я в гугле нарыл,но у меня так ничего и не получилось...вроде-бы надо создавать какой-то включаемый файл, обьявить функции внешими
    Код (Text):
    1. #ifdef MYDLL_EXPORTS
    2. #define MYDLL_API __declspec(dllexport)
    3. #else
    4. #define MYDLL_API __declspec(dllimport)
    5. #endif
    6.  
    7. // Переменная
    8. extern MYDLL_API int Var;
    9.  
    10. // Функция
    11. MYDLL_API void Function(int, int);
    12.  
    13. // Класс
    14. class MYDLL_API Class
    15. {
    16. private:
    17.     int a;
    18.  
    19. public:
    20.     Class();
    21.     ~Class();
    22.  
    23.     int GetA();
    24.     void SetA(int _a=0);
    25.  
    26.     virtual void VirtualFunc();
    27.  
    28.     static void StaticFunc();
    29.     static int StaticVar;
    30. };
     
  10. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    чото я там немогу найти ничего связанного с тем что мне надо...
     
  11. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Если вопит компилятор, то нужно объявить символ.
     
  12. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    ага.а как ЧТО его обьявить?как рельсу?
     
  13. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Если у тебя функция, то например так: extern "C" void __stdcall foo(int, char); если переменная то например: extern int a;
     
  14. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    arrrg
    Нужно согласовывать конвенции вызова, в VisualStudio объявить прототипы
    функций.
     
  15. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Не совсем понял что нужно автору, заюзать ф-цию экспортируемую некой длл ?
    Если lib файла нет, то так как писал AndreyMust19
    Только я обычно делаю так:
    typedef BOOL(__stdcall *PENTRYCALLBACK)(PENTRY pEntry,PCHAR pcRealPath);
    PENTRYCALLBACK pCallbaclk = (PENTRYCALLBACK)GetProcAddress(GetModuleHandleA("Name.dll"),"FuncName");
    pCallback(var1, var2);

    Если lib есть, то надо обьявить примерно так
    extern "C" int __cdecl Function(DWORD var1, DWORD var2);
    или
    extern "C" int __stdcall Function(DWORD var1, DWORD var2);
    тут уж надо знать как собрана либа...
     
  16. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    идентификатор DWORD вообще не распознаётся компилятором...lib файл имеется
     
  17. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    блин это ж я для примера) тебе там твою ф-цию с твоими параметрами надо. вместо дворда можешь написать unsigned int
     
  18. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    подключите заголовочный файл windows.h

    допустим, некая библитека экспортирует функцию test_proc
    конвенция - cdecl, она принимает 2 параметра типа int.
    и возвращяет int

    Тогда в исходном файле на си надо её объявить так:
    Код (Text):
    1. #ifdef __cplusplus ;; на случай, если это цпп-компилятор.
    2. extern "C" {
    3. #endif
    4.  
    5.     int __declspec(dllimport) test_proc(int a, int b);
    6.  
    7. #ifdef __cplusplus
    8. };
    9. #endif
    Разумеется, надо также подключить библиотеку импорта.
     
  19. arrrg

    arrrg New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2009
    Сообщения:
    124
    хм
    ничего из этого не помогло...
    стабильно получаю или LNK2019+LNK2028 или LNK1313
     
  20. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Выкладывай dll и lib, поможем.