Каркас Dll

Тема в разделе "MS Visual C++", создана пользователем Kee_Keekkenen, 12 дек 2008.

  1. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    народ, пожалуйста, окажите неоценимую услугу - приведите пример каркаса динамической dll с одной функцией, которая например возвращала бы строковое значения (например, версию приложения)..

    и еще, какие нужны декларации для использования апишных функций (хуки например) ?


    видимо я коряво написал или это нераальная задача :)
     
  2. Maxx

    Maxx Гость

    есть такая куча документов как msdn
    тебе должно помочь

    каркас dll (если пишешь в visual c++) создается так: file->new project
    дальше в визарде вибираешь dll и в additional options exports symbols
    это в visual studio .net 2003 в (vc 6 вроде такое же)
    чтобы нормально экспортировать функции из длл (и еще для разных компиляторов) лучше создавать .def файл (в msdn про это пишут)
    для классов сказать не могу (т.к. у разных компиляторов разный способы названия методов)
    в этом случае должны помочь абстрактные классы или интерфейсы (как в COM, например)


    чтобы возвращать строку надо ее создать либо в статической области памяти (но про потоки можешь забыть, если аккуратно не писать программу), либо в динамической памяти (но надо решить вопрос кто будет удалять эту самую строку)
    про стек тоже можешь забыть если не хотишь хлебнуть лиха
    еще такой момент: если ты резервируешь память в длл, а освобождаешь в программе которая использует эту длл (или наооборот, по этому надо посмотреть в сторону интерфейса IMalloc или функций CoTaskMemAlloc и иже с ними) тоже можешь хлебнуть лиха (и очень долго искать причину ошибки)

    p.s. C++ позволяет делать с памятью (и не только с ней) все что хотишь, но и расплачиваться за это надо тем, что C++ ничего не скажет про то что у тебя есть ошибка (именно семантическая)
     
  3. alexsid

    alexsid Гость

    Код (Text):
    #include <windows>
    BOOL APIENTRY DllMain(HMODULE hModule, DWORD reason, LPVOID lpReserved)
    {
    return TRUE;
    }

    char* __declspec(dllexport) GetVersion()
    {
    return "Version: 0.01";
    }
     
  4. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    спасибо за комментарии
     
Загрузка...

Поделиться этой страницей