exportation de composant vcl contenu dans une dll [Builder c++] - C++ - Programmation
Marsh Posté le 28-05-2002 à 14:12:35
Tu veux faire quoi exactement ? Utiliser dans un programme un composant VCL défini dans un DLL ? Il me semble que ce n'est pas possible...
Marsh Posté le 28-05-2002 à 14:46:56
Définir un composant dans un DLL ca conduit inévitablement à un plantage... Tu peux utiliser un form à la limite mais pas un composant.
Par contre tu peux essayer en ActiveX
Marsh Posté le 29-05-2002 à 09:57:35
oui mais ce que je veux faire
c à partir d'une fenêtre MDI principale,
ouvrir une fenêtre MDI fille
ça c simple
mais le pb c que ma fenêtre MDI fille est dans une dll
et la ça plante à l'execution
(j'ais essayé de la mettre dans un paquet mais même résultat)
Marsh Posté le 29-05-2002 à 10:23:41
ça ça devrait fonctionner je crois, une fenêtre dans une DLL
maintenant faut voir comment tu fais l'appel et la construction de la fenêtre
Marsh Posté le 29-05-2002 à 10:37:54
voici un exemple simplifié de ce que je faire
dans le ccp de ma fenêtre MDI principale, je fais :
#include <vcl.h>
#pragma hdrstop
#include "TFom1.h"
#include "TForm2.h"
//---------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::Nouveau1Click(TObject *Sender)
{
TForm2 * child;
child = new TForm2(this);
child->Show();
}
et la déclaration de TForm2 ds la dll est :
ifndef TForm2H
#define TForm2H
//---------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------
class __declspec( dllexport ) TForm2 : public TForm
{
__published: // Composants gérés par l'EDI
private: // Déclarations de l'utilisateur
public: // Déclarations de l'utilisateur
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------
#endif
[jfdsdjhfuetppo]--Message édité par ashram79 le 29-05-2002 à 10:38:33--[/jfdsdjhfuetppo]
Marsh Posté le 29-05-2002 à 10:41:57
c'est très bizarre la façon dont tu utilise cette dll...
enfin c'est peut-être normal
[jfdsdjhfuetppo]--Message édité par antp le 29-05-2002 à 10:43:32--[/jfdsdjhfuetppo]
Marsh Posté le 29-05-2002 à 10:48:49
je suis obligé de faire comme ça par rapport
à ce qui va être fait ensuite
PS : j'ais oublié de préciser que la dll n'est pas chargée dynamiquement mais en statique
Marsh Posté le 29-05-2002 à 11:00:27
je me doute bien que c'est statique, mais je ne savais pas qu'on pouvait utiliser une classe d'une DLL comme ça...
je pense que tu dois appeler une fonction de ta DLL qui elle va créer Form2... Mais ce n'est qu'une supposition, vu que je n'ai pas beaucoup utilisé de DLL (et juste en dynamique) je risque de t'induire en erreur...
Marsh Posté le 29-05-2002 à 11:05:30
exporter des classes en statique c possible
( j'ais déjà essayé et ça marche bien)
mais là le pb c que c des composants graphiques borland
Marsh Posté le 29-05-2002 à 11:51:14
Tu as essaye sans les __fastcall ?
c'est compatible avec des appels entre Prog et Dll ?
Marsh Posté le 29-05-2002 à 11:56:14
sans les __fastcall il ne compile même pas
[jfdsdjhfuetppo]--Message édité par ashram79 le 29-05-2002 à 11:57:17--[/jfdsdjhfuetppo]
Marsh Posté le 29-05-2002 à 12:06:39
Sinon, question bete...
le dllexport, il devient bien un dllimport pour le prog principal ?
Marsh Posté le 28-05-2002 à 14:09:17
salut,
j'essaye d'exporter un formulaire
contenu dans une DLL pour l'utiliser à partir du prgm
principal
cela compile
mais lorsque j'execute ça me met
l'erreur suivante :
" classe d'exception EAccessViolation avec le message 'violation
d'accès à l'adresse 0022BA2A dans le module 'DLLVCL.dll'.Lecture
de l'adresse 7B0825F3.' "
si qq un pouvait m'aider
je lui en serait éternellemnt reconnaissant