powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Dll и создание формы
10 сообщений из 10, страница 1 из 1
Dll и создание формы
    #32732684
tors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если несколько раз создать/закрыть форму из DLL, при закрытии проги используещей данную dll - Acces violation

Unit.cpp

//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>

#include "FormUnit.h"

#pragma hdrstop
//---------------------------------------------------------------------------
// Important note about DLL memory management when your DLL uses the
// static version of the RunTime Library:
//
// If your DLL exports any functions that pass String objects (or structs/
// classes containing nested Strings) as parameter or function results,
// you will need to add the library MEMMGR.LIB to both the DLL project and
// any other projects that use the DLL. You will also need to use MEMMGR.LIB
// if any other projects which use the DLL will be performing new or delete
// operations on any non-TObject-derived classes which are exported from the
// DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
// EXE's to use the BORLNDMM.DLL as their memory manager. In these cases,
// the file BORLNDMM.DLL should be deployed along with your DLL.
//
// To avoid using BORLNDMM.DLL, pass string information using "char *" or
// ShortString parameters.
//
// If your DLL uses the dynamic version of the RTL, you do not need to
// explicitly add MEMMGR.LIB as this will be done implicitly for you
//---------------------------------------------------------------------------

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
extern "C" void __stdcall __export ShowFormAsModal(void)
{
MyForm=new TMyForm(Application);
MyForm->ShowModal();
}

extern "C" void __stdcall __export ShowForm(void)
{
MyForm=new TMyForm(Application);
MyForm->Show();
}
extern "C" void __stdcall __export CloseForm(void)
{
if(MyForm)
{
MyForm->Close();
MyForm->Free();
MyForm=NULL;
}
}

//---------------------------------------------
...
Рейтинг: 0 / 0
Dll и создание формы
    #32732686
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я тут гдето кидал пример , как юзать форму в длл
поищи а то мне лень искать


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Dll и создание формы
    #32732745
tors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причем, если вызываю экспортированную функцию CloseForm - все нормально.
А если создаю а за тем закрываю форму из DLL крестиком несколько раз - маты(если один раз -все OK).

Пример не нашел
C ув. Tors
...
Рейтинг: 0 / 0
Dll и создание формы
    #32732751
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хех вот тут нашел что то, попробуй так ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
extern "C" void __declspec(dllexport) GetDLLChildForm(TApplication *ExeApp, TForm **Form); 

TApplication *DLLApp; 

#pragma argsused 
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) 
{ 
// Если DLL выгружается 
if (reason == DLL_THREAD_DETACH) 
{ 
Application = DLLApp; 
} 
return  1 ; 
} 
// ---------------------------------------------------------------------------  

void GetDLLChildForm(TApplication *ExeApp, TForm **Form) 
{ 
DLLApp = Application; 
Application = ExeApp; 
*Form = new TForm2(Application); 
} 

В exe 
void __fastcall TForm1::ButtonShowDLLFormClick(TObject *Sender) 
{ 
TForm *DLLForm; 
GetDLLChildForm(Application,&DLLForm); 
DLLForm->Show(); 
}


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Dll и создание формы
    #32732841
tors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На выходе из
void __fastcall TForm1::ButtonShowDLLFormClick(TObject *Sender)
Access violation
...
Рейтинг: 0 / 0
Dll и создание формы
    #32733369
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хмм , помойму еще надо включать RTL посмотри включен он у тебя или нет


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Dll и создание формы
    #32733464
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНа выходе из
void __fastcall TForm1::ButtonShowDLLFormClick(TObject *Sender)
Access violation

Такая фигня с разными модулями может быть например в таких случаях(сам нарывался):
При попытке доступа модуля к запрещённому куску памяти приложения.
У меня как оно было: полез я в explorer, в контрол в некий, и сказал ему:
SendMesage(..) c сообщением, где в lParam передавался указатель на _правильный_ кусок памяти для этого сообщения - типа вытянуть некоторую структуру инфы.

В результате я уронил ехрлогег c вышеописанной ошибкой
...
Рейтинг: 0 / 0
Dll и создание формы
    #32733815
tors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTL включен.
Народ, дайте пример(ссылочку или на secor@ukr.net или в топик), как работать с формами из дллины


C ув. Tors
...
Рейтинг: 0 / 0
Dll и создание формы
    #32733983
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
TForm1* MyForm ; 
//... 
extern "C" int __declspec( dllexport ) ShowVCLWindow(  HWND parent ) 
{ 
if( MyForm != NULL ) 
{ 
   MyForm->Show() ; 
   return  0  ; 
} 
Application->Handle = parent ; //!!!Важно!!!! 
try 
  { 
    Application->Initialize(); 
    MyForm = new TForm1( Application ) ; 
  } 
  catch (Exception &exception) 
  { 
      Application->ShowException(&exception); 
  } 
return  0  ; 
} 

extern "C" int __declspec( dllexport ) DesroyVCLWindow() 
{ 
if( MyForm == NULL ) 
   return  0  ; 
  delete MyForm ; 
  MyForm = NULL ; 
}
Вот выискал ...
...
Рейтинг: 0 / 0
Dll и создание формы
    #32734183
tors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Та же хрень.
Форма создается , но на выходе из обработчика собития клика Access Violation

C ув. Tors
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Dll и создание формы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]