Проблема с DLL Topic is solved
Проблема с DLL
Доброго времени суток,
Кто нибудь писал DLL с исподбзованием wx?
Написал библиотеку DLL, которая экспортирует класс. В параметрах компилятора проставил что она _USRDLL, т.е. линкуется статически.
Проэкт с библиотекой и основным приложением компилируется нормально, а при запуске висит.
Отладчик VC показывает что в качестве основного выбран объект wxApp из библиотеки.
Помимо всего прочего еще и сообщения выскакивают:
10:22:34 PM: C:\wxWidgets.54790\src\msw\app.cpp(674): 'RegisterClass(wxMDIChildFrameClass@103DE5E0)' failed with error 0x00000582 (class already exists.).
10:22:34 PM: C:\wxWidgets.54790\src\msw\app.cpp(674): 'RegisterClass(wxMDIChildFrameClass@103DE5E0NR)' failed with error 0x00000582 (class already exists.).
10:22:34 PM: Adding duplicate image handler for 'Windows bitmap file'
The program 'F:\projects\AppBuilder\src\vc_mswuddll\docview.exe' has exited with code 0 (0x0).
Кто знает что делать?
WinXP/VC++6/wx TRUNK DLL debug build.
Заранее спасибо.
Кто нибудь писал DLL с исподбзованием wx?
Написал библиотеку DLL, которая экспортирует класс. В параметрах компилятора проставил что она _USRDLL, т.е. линкуется статически.
Проэкт с библиотекой и основным приложением компилируется нормально, а при запуске висит.
Отладчик VC показывает что в качестве основного выбран объект wxApp из библиотеки.
Помимо всего прочего еще и сообщения выскакивают:
10:22:34 PM: C:\wxWidgets.54790\src\msw\app.cpp(674): 'RegisterClass(wxMDIChildFrameClass@103DE5E0)' failed with error 0x00000582 (class already exists.).
10:22:34 PM: C:\wxWidgets.54790\src\msw\app.cpp(674): 'RegisterClass(wxMDIChildFrameClass@103DE5E0NR)' failed with error 0x00000582 (class already exists.).
10:22:34 PM: Adding duplicate image handler for 'Windows bitmap file'
The program 'F:\projects\AppBuilder\src\vc_mswuddll\docview.exe' has exited with code 0 (0x0).
Кто знает что делать?
WinXP/VC++6/wx TRUNK DLL debug build.
Заранее спасибо.
-
- wxWorld Domination!
- Posts: 1471
- Joined: Tue Nov 14, 2006 7:58 am
- Location: Saint-Petersburg, Russia
Re: Проблема с DLL
Привет.
Ну а как же, только этим и занимаюсьONEEYEMAN wrote:Доброго времени суток,
Кто нибудь писал DLL с исподбзованием wx?
Тут не понял, в каких параметрах? Да и вообще нет никакой реальной разницы (с точки зрения DLL), динамически она линкуется или статически.ONEEYEMAN wrote: Написал библиотеку DLL, которая экспортирует класс. В параметрах компилятора проставил что она _USRDLL, т.е. линкуется статически.
Ну, во-первых, что бы точно сказать надо бы код этой DLL посмотреть. А, во-вторых, судя по всему, не надо просто лишний раз инициализировать библиотеку в этой DLL, ну и всяких IMPLEMENT_APP_NO_MAIN() там юзать.ONEEYEMAN wrote: Проэкт с библиотекой и основным приложением компилируется нормально, а при запуске висит.
Отладчик VC показывает что в качестве основного выбран объект wxApp из библиотеки.
Помимо всего прочего еще и сообщения выскакивают:
10:22:34 PM: C:\wxWidgets.54790\src\msw\app.cpp(674): 'RegisterClass(wxMDIChildFrameClass@103DE5E0)' failed with error 0x00000582 (class already exists.).
10:22:34 PM: C:\wxWidgets.54790\src\msw\app.cpp(674): 'RegisterClass(wxMDIChildFrameClass@103DE5E0NR)' failed with error 0x00000582 (class already exists.).
10:22:34 PM: Adding duplicate image handler for 'Windows bitmap file'
The program 'F:\projects\AppBuilder\src\vc_mswuddll\docview.exe' has exited with code 0 (0x0).
Кто знает что делать?
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
Re: Проблема с DLL
Ponjatno. To est prilogenij ne pishem tolko biblioteki...tan wrote: Привет.Ну а как же, только этим и занимаюсьONEEYEMAN wrote: Доброго времени суток,
Кто нибудь писал DLL с исподбзованием wx?
Zato est s tochki zrenija prilogenija...tan wrote:Тут не понял, в каких параметрах? Да и вообще нет никакой реальной разницы (с точки зрения DLL), динамически она линкуется или статически.ONEEYEMAN wrote: Написал библиотеку DLL, которая экспортирует класс. В параметрах компилятора проставил что она _USRDLL, т.е. линкуется статически.
tan wrote:Ну, во-первых, что бы точно сказать надо бы код этой DLL посмотреть. А, во-вторых, судя по всему, не надо просто лишний раз инициализировать библиотеку в этой DLL, ну и всяких IMPLEMENT_APP_NO_MAIN() там юзать.ONEEYEMAN wrote: Проэкт с библиотекой и основным приложением компилируется нормально, а при запуске висит.
Отладчик VC показывает что в качестве основного выбран объект wxApp из библиотеки.
Помимо всего прочего еще и сообщения выскакивают:
10:22:34 PM: C:\wxWidgets.54790\src\msw\app.cpp(674): 'RegisterClass(wxMDIChildFrameClass@103DE5E0)' failed with error 0x00000582 (class already exists.).
10:22:34 PM: C:\wxWidgets.54790\src\msw\app.cpp(674): 'RegisterClass(wxMDIChildFrameClass@103DE5E0NR)' failed with error 0x00000582 (class already exists.).
10:22:34 PM: Adding duplicate image handler for 'Windows bitmap file'
The program 'F:\projects\AppBuilder\src\vc_mswuddll\docview.exe' has exited with code 0 (0x0).
Кто знает что делать?
Code: Select all
IMPLEMENT_APP_NO_MAIN(CLibraryApp)
#ifdef __WXMSW__
bool DllMain(...)
{
switch( fReason)
{
case DLL_PROCESS_ATTACH:
wxInitialize();
break;
case DLL_PROCESS_DETACH:
wxUninitialize();
break;
}
return true;
}
#endif
bool CLibraryApp::OnInit()
{
return true;
}
-
- wxWorld Domination!
- Posts: 1471
- Joined: Tue Nov 14, 2006 7:58 am
- Location: Saint-Petersburg, Russia
Нет, не так. DllMain (или другая, указанная линкеру функция) будет вызвана, если она существует в DLL при ее загрузке. Она может быть использована для выполнения определенных действий, например для инициализации переменных и т.д. Если ее нет, то и фиг с нейONEEYEMAN wrote:Naskolko ja znaju, pod MS vse DLL dolgny imet funkciju DllMain().
Eto t.n. tochka vhoda v biblioteku...
Если главное приложение само использует WX и библиотеки WX собраны как DLL, то нет никакого смыслв (т.е. даже вредно) инициализировать WX при загрузке внешней DLL, поскольку и главное приложение и эта DLL используют один и тот же экземпляр WX DLL и он уже инициализован в главном приложении. Я об этом уже неоднократно писал здесь на форуме.ONEEYEMAN wrote: [EDIT]
Sorry, sovsem zabyl.
Prilogenie toge napisano pod wx. Vse ispolzuet wx kak DLL Debug.
[/EDIT]
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10
tan,
Тут проблема вот еще в чем.
В моем приложении 2 вида DLL: динамическая библиотека и статическая библиотека.
Поэтому чтобы удовлетворить запросы первой использую DLL-build wx'а.
Что касается DllMain(), то здесь я совсем ничего не понимаю. Вроде как все говорят что она должна быть...
Но я попробую без нее и без создания объекта приложения...
[EDIT]
P.S.: Только что прочекал MSDN. Признаю - был в корне неправ.
[/EDIT]
Тут проблема вот еще в чем.
В моем приложении 2 вида DLL: динамическая библиотека и статическая библиотека.
Поэтому чтобы удовлетворить запросы первой использую DLL-build wx'а.
Что касается DllMain(), то здесь я совсем ничего не понимаю. Вроде как все говорят что она должна быть...
Но я попробую без нее и без создания объекта приложения...
[EDIT]
P.S.: Только что прочекал MSDN. Признаю - был в корне неправ.
[/EDIT]