Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MFC extension Dll, Помогите.. 
:(
    Опции темы
Coocky
Дата 31.10.2005, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Вот прищло время и мне задавать вопросы..
Использую dll с поддержкой МФС.
1 Как сделать так. что б она не требовала mfc71.dll на другом компе.(use static MFC в настройках dll не спасает..)
2. Как обойти проблему с CString в функции, которая находится в dll (кто не знает, напомню, проблемы в том. что при статической компиляции, Realese версии, пишется компилятором. что данная функция не найдена. Это из-за CString.) Пока обхожусь const char*, но меня не устраивает.
3. можно ли подключить в link опциях проекта более одной своей dll( pragma в коде не предлагать.. smile )
И еще, когда нужно делать в exe проекте настройку use static ATL? Я понимаю, что использовании ATL, но класс CString тоже ATL уже. Если его использую, нужно ли для заказчика делать static ATL? smile

Это сообщение отредактировал(а) Coocky - 31.10.2005, 23:37


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Mad
Дата 1.11.2005, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 2
Всего: 19



Цитата(Coocky @ 31.10.2005, 22:34)
Вот прищло время и мне задавать вопросы..

Или вернулось время smile

1. отвязаться от MFC либы у тебя врядли получиться (сам видел много больших комерческих проектов, которые эту самую mfc71.dll ставят сами, причем просто в каталог приложения, а не в system32 smile)
2. никогда не видел такой проблеммы, может просто вопрос в версиях компилятора (я имею в виду Enterprice etc)


--------------------
user posted image
PM MAIL   Вверх
nikf
Дата 1.11.2005, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 6.6.2005
Где: город-герой Жирно вск

Репутация: 1
Всего: 1



Цитата(Coocky @ 31.10.2005, 23:34)
1 Как сделать так. что б она не требовала mfc71.dll на другом компе
- никак, mfc extension допускает только динамическую линковку mfc, как в dll так и в самом клиенте(exe). В противном случае гора глюков тебе обеспечена т.к. не будет происходить синхронизации глобальных переменных mfc в dll и exe. Кстати нужно в начало каждой экспортируемой функции dll вставлять макрос AFX_MANAGE_STATE(AfxGetModuleState());
Цитата(Coocky @ 31.10.2005, 23:34)
2. Как обойти проблему с CString в функции, которая находится в dll
а зачем обходить - если все правильно делать - все будет работать см ответ на пункт1. Либо пиши классическую dll экспортирующую функции в стиле си(простые типы данных, никаких стрингов и других классов)при этом внутри можешь использовать mfc и линковать ее статически
Цитата(Coocky @ 31.10.2005, 23:34)
3. можно ли подключить в link опциях проекта более одной своей dll( pragma в коде не предлагать.. smile )
да сколько угодно

кстати когда создаешь длл не читал чего тебе визард пишет? а зря

Код

DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
    // Remove this if you use lpReserved
    UNREFERENCED_PARAMETER(lpReserved);

    if (dwReason == DLL_PROCESS_ATTACH)
    {
        TRACE0("adsrvsc.DLL Initializing!\n");
        
        // Extension DLL one-time initialization
        if (!AfxInitExtensionModule(adsrvscDLL, 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.



Это сообщение отредактировал(а) nikf - 1.11.2005, 11:02
PM MAIL   Вверх
Coocky
Дата 1.11.2005, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(Coocky @ 31.10.2005, 23:34)
1 Как сделать так. что б она не требовала mfc71.dll на другом компе.(use static MFC в настройках dll не спасает..)

Тут разобрались.. Это крест! smile В смысле либу тащить прийдется... smile

nikf
Mad
Как быть с ATL? smile
Цитата(nikf @ 1.11.2005, 10:57)
а зачем обходить - если все правильно делать - все будет работать см ответ на пункт1

Сейчас попробую..

Цитата(nikf @ 1.11.2005, 10:57)
кстати когда создаешь длл не читал чего тебе визард пишет? а зря

Да когда пошли запаря со стрингом, не до чтения, оказалось..

Пока спасибо всем, разберусь, отблагадарю..
Добавлено @ 11:30
Цитата(nikf @ 1.11.2005, 10:57)
Кстати нужно в начало каждой экспортируемой функции dll вставлять макрос AFX_MANAGE_STATE(AfxGetModuleState());

Не работает, или не понял.....
Вставил в начало функции, все равно ошибка вылетает, при компиляции..



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
nikf
Дата 1.11.2005, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 6.6.2005
Где: город-герой Жирно вск

Репутация: 1
Всего: 1



Цитата(Coocky @ 1.11.2005, 11:23)
Цитата (nikf @ 1.11.2005, 10:57)
Кстати нужно в начало каждой экспортируемой функции dll вставлять макрос AFX_MANAGE_STATE(AfxGetModuleState());

Не работает, или не понял.....
Вставил в начало функции, все равно ошибка вылетает, при компиляции..


это относится только к mfc extension. И отсутствие этой строки не должно влиять на компиляцию. Просто не будет глюков в рантайм.
Вот функция в длл
Код

extern "C" __declspec(dllexport) BOOL IsNum(char c)
{
    AFX_MANAGE_STATE(AfxGetModuleState());
    if(47<c && c<58) return TRUE;
    return FALSE;
}
все работает. В этой функции простые типы данных но с таким же успехом можешь юзать свои классы или классы MFC:

Код

class AFX_EXT_CLASS CMyClass:public CObject
{
    DECLARE_SERIAL(CMyClass)
дальше как обычно

в остальном работаешь с mfc extension dll как буд-то все твои длльные функции находятся в основном(exe) проекте. Не понятно почему у тебя возникают проблемы. Версии mfc должны быть одинаковы для dll и exe..

Это сообщение отредактировал(а) nikf - 1.11.2005, 12:37
PM MAIL   Вверх
Coocky
Дата 1.11.2005, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(nikf @ 1.11.2005, 12:35)
Не понятно почему у тебя возникают проблемы. Версии mfc должны быть одинаковы для dll и exe..

Не будете кидать гнилыми помидорами?
Я забыл включить в срр файл dll_ки описание заголовка dll Все работает smile
(под свист толпы полетели камни и гнилые помидоры.. smile )
А как с ATL?


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
nikf
Дата 1.11.2005, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 6.6.2005
Где: город-герой Жирно вск

Репутация: 1
Всего: 1



Я не имею информации по тому как в твоем случае надо линковать ATL. Могу предположить, что как угодно т.к. никаких таких требований при создании mfc extension мне на эту тему не попадалось. И соответственно при статической линковке тащить библиотеки не потребуется. Вообще у тебя странный котейль получается. Обычно или MFC проект или ATL smile
офтоп Я как-то в целях експеримента добавлял в проект MFC поддержку .NET. заработало, но изврат это и избыточность кода т.к. многие возможности дублируются в этих библиотеках.тОже можно сказать и про MFC-ATL.
PM MAIL   Вверх
Coocky
Дата 1.11.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(nikf @ 1.11.2005, 14:15)
Вообще у тебя странный котейль получается. Обычно или MFC проект или ATL

Я переживаю за CString Это уже вроде ж ATL smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Mad
Дата 1.11.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Эксперт
Сообщений: 656
Регистрация: 18.10.2004
Где: Одесса

Репутация: 2
Всего: 19



Цитата(Coocky @ 1.11.2005, 13:51)
CString Это уже вроде ж ATL

всетаки это еще МФЦ, просто в АТЛ есть аналогичный класс smile


--------------------
user posted image
PM MAIL   Вверх
Coocky
Дата 1.11.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(Mad @ 1.11.2005, 15:09)
всетаки это еще МФЦ, просто в АТЛ есть аналогичный класс

Да,но когда ошибки с CString, ссылается -то на ATL?



--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Earnest
Дата 2.11.2005, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



В 7 студии они это дело слили, даже каталог называется atlmfc, а CString - это синоним для ATLString или что-то вроде. Так что не волнуйся на эту тему, все должно срастись.

Предыдущие товарищи все правильно написали с одной поправкой: в Extension DLL как раз не надо писать AFX_MANAGE_STATE(AfxGetModuleState()) в каждой экспортируемой функции(потому что он там такой же, как в приложении). Т.е. ничего плохого не будет, просто не нужно.
А надо это дело писать как раз в не-Extension DLL (и влияет это, в основном, на поиск ресурсов, ну еще переключает карты временных объектов и прочая).

И еще, если нужно использовать несколько DLL, не используй макросы типа AFX_EXT_CLASS - лучше определи свои для каждой DLL.



--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0655 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.