1) Premièrement, tu dois associer le thread de ta DLL à l'application principale:
Du côté de l'application: transmettre l'objet TApplication:
1 2
| CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
DLLInitialize(Application); |
Du côté de la DLL, tu dois associer l'application local à l'application parente:
1 2 3 4 5 6
| //! Initialise the module (see the bool vs int note)
extern "C" __stdcall __declspec(dllexport,dllimport) void Initialize(TApplication*parentAppl) {
Application=parentAppl;
} |
2) Ensuite, au moment où tu crée ta fenêtre "DLL", tu peux transmettre le handle de la fenêtre principale pour qu'elle apparaisse dedans:
Du côté de l'application:
DLLShow(Application->MainForm);
Du côté de la DLL:
1 2 3 4 5 6 7 8 9 10 11 12 13
| extern "C" __stdcall __declspec(dllexport,dllimport) Show(TForm* parentForm) {
TForm *MainForm=new TForm(this);
if (MainForm) {
// Set parent form
if (parentForm) MainForm->Parent=parentForm;
// Set icon
MainForm->Icon->Handle = CopyIcon(Application->Icon);
// Show the window in its default state
MainForm->Show();
}
} |
Partager