Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Классы в DLL

41K
14 июня 2010 года
Mushik_Heart
28 / / 15.05.2009
Подскажите, пожалуйста, как реализовать передачу класса в проект из dll. Уже замучился делать, единственное, что получилось - вызвать функцию, показывающую MessageBox, но и это куда-то ушло. Хотелось бы оформить в dll самопальный видеоплеер, сделанный как куча классов. Или хотя бы пример предачи простого диалога (желательно, с подробной инструкицей).
307
14 июня 2010 года
Artem_3A
863 / / 11.04.2008
гуглить не пробовали? решениями этой "проблемы" увешано половина интернетов.

вот
вот
вот

если же все таки гуглили и не помогло, то приводите код, будем смотреть, где у вас ошибка, а то телепатов тут как бы и нет.
41K
14 июня 2010 года
Mushik_Heart
28 / / 15.05.2009
Конечно же, гуглил. Итак, имеется MFC-extension dll и тестовое приложение.
Вот как класс описывается в dll:

Код:
PPCDll.h
class AFX_EXT_CLASS ppc : public CButton
{  
    public:
        ppc();
        ~ppc();
        void Message(const char *str);
};
class AFX_EXT_CLASS testclass
{   public:
        void Nate();
        void Nate(int vpolete);
};

PPCDll.cpp
#include "stdafx.h"
#include <afxwin.h>
#include <afxdllx.h>
#include "PPCDll.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

static AFX_EXTENSION_MODULE PPCDllDLL = { NULL, NULL };

extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    // Remove this if you use lpReserved
    UNREFERENCED_PARAMETER(lpReserved);

    if (dwReason == DLL_PROCESS_ATTACH)
    {
        TRACE0("PPCDll.DLL Initializing!\n");
       
        // Extension DLL one-time initialization
        if (!AfxInitExtensionModule(PPCDllDLL, hInstance))
            return 0;

        // Insert this DLL into the resource chain
        // NOTE: If this Extension DLL is being implicitly linked to by
        //  an MFC Regular DLL (such as an ActiveX Control)
        //  instead of an MFC application, then you will want to
        //  remove this line from DllMain and put it in a separate
        //  function exported from this Extension DLL.  The Regular DLL
        //  that uses this Extension DLL should then explicitly call that
        //  function to initialize this Extension DLL.  Otherwise,
        //  the CDynLinkLibrary object will not be attached to the
        //  Regular DLL's resource chain, and serious problems will
        //  result.

        new CDynLinkLibrary(PPCDllDLL);

    }
    else if (dwReason == DLL_PROCESS_DETACH)
    {
        TRACE0("PPCDll.DLL Terminating!\n");

        // Terminate the library before destructors are called
        AfxTermExtensionModule(PPCDllDLL);
    }
    return 1;   // ok
}

ppc::ppc()
{
}
ppc::~ppc()
{
}
void ppc::Message(const char *str)
{   MessageBoxA(0,str,"", MB_APPLMODAL|MB_ICONINFORMATION);
}
void testclass::Nate()
{   MessageBoxA(0,"Просто!","На те!", MB_APPLMODAL|MB_ICONINFORMATION);
}
void testclass::Nate(int vpolete)
{   MessageBoxA(0,"В полёте!","На те!", MB_APPLMODAL|MB_ICONINFORMATION);
}

а в приложении имеется экземпляр этого класса. Вызов этих сообщений происходит кореектно. Но функция Create (p.Create("Опа!",WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE,CRect(0,0,50,50),this, 6578) ; ) не срабатывает - программа вылетает. Попробовал засунуть самодельный класс матриц - всё работает прекрасно.
41K
15 июня 2010 года
Mushik_Heart
28 / / 15.05.2009
Пожалуйста, кто-нибудь, напишите пример класса, унаследованного от CDialog (или кнопки, нет разницы) под VS2008, чтобы это работало. А то я уже мозг сломал, лазая по интернету и пытаясь что-то слепить. Буду премного благодарен.
14
15 июня 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: Mushik_Heart
Вызов этих сообщений происходит кореектно. Но функция Create не срабатывает


Каких сообщений? Вы собираетесь вообще унаследованные методы вызывать и деструктор виртуальным делать?

41K
16 июня 2010 года
Mushik_Heart
28 / / 15.05.2009
Цитата: Phodopus
Каких сообщений? Вы собираетесь вообще унаследованные методы вызывать и деструктор виртуальным делать?

Т.е. не сообщения, а функции (Message). Вообще-то, Create я не переопределял. И вообще, я уже разобрался. Ошибка крылась в строке "Опа!" - надо было изменить Character Set в свойствах проекта. Сейчас всё работает, и плеер тоже.

41K
17 июня 2010 года
Mushik_Heart
28 / / 15.05.2009
А теперь возник такой вопрос - а как приложение с такой dll можно использовать на компьютере без VS? Статически не компилируется, можно ли перетащить MFC-ые dll на целевую машину? Или есть иные способы обойти эту проблему?
307
17 июня 2010 года
Artem_3A
863 / / 11.04.2008
1. по третей сцылки, которую я вам давал, был пример по шагам, как сделать дллку с диалогом внутри.
2. на сколько я помню таких проблем с мфц не было у меня ни разу... у вас при запуске приложения кричит о не достающей либе мфцэшной, я вас правильно понял? попробуйте пересобрать приложение с параметрами статической линковки. если же у вас как бы кричит на нехватку самописной дллки, то ее не то что можно перетащить, ее нужно перетащить.
41K
17 июня 2010 года
Mushik_Heart
28 / / 15.05.2009
Цитата: Artem_3A
1. по третей сцылки, которую я вам давал, был пример по шагам, как сделать дллку с диалогом внутри.

Про это я уже забыл - всё работает.

Цитата: Artem_3A
у вас при запуске приложения кричит о не достающей либе мфцэшной, я вас правильно понял? попробуйте пересобрать приложение с параметрами статической линковки. если же у вас как бы кричит на нехватку самописной дллки, то ее не то что можно перетащить, ее нужно перетащить.

Когда я отдаю на тест другому человеку (без Visual Studio), то Windows 7 заявляет о неправильной параллельной конфигурации, а XP - о некорректной настройке (наверное, одно и то же, не уверен). Если Visual Studio там стоит, то всё работает. Статически приложение не компилируется (ошибка, мол, не может обновить *.exe.manifest). В папку с приложением я кидал все самописные dll и все библиотеки, что нашёл в system32, по названию похожие на MFC (там всякие mfc90u.dll и тому подобные).

307
17 июня 2010 года
Artem_3A
863 / / 11.04.2008
есть такие штуки как перехватчики апи, обзаведитесь оной штуковиной и посмотрите какие длл задействованы в вашем приложении постфактум.
14
18 июня 2010 года
Phodopus
3.3K / / 19.06.2008
Цитата: Mushik_Heart
можно ли перетащить MFC-ые dll на целевую машину


как уже достали с этим тупняком.. из года в год, из форума в форум - одно и то же..
1
2
3
4

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог