cs_Ayato
Messages postés14Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention13 novembre 2006
-
10 août 2005 à 12:29
cs_Ayato
Messages postés14Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention13 novembre 2006
-
18 août 2005 à 11:50
Bonjour
<!--[if !supportEmptyParas]--><!--[endif]--> Je cherche en ce moment a développer un ActiveX utilisant
les port Com.
Celui-ci est développé
sous VC++ en MFC (je sais il est plus conseillée de le développer en ATL, mais
vu mes connaissance ).
<!--[if !supportEmptyParas]--><!--[endif]--> Dans cette ActiveX je gère les port Com en utilisant le
composant Mscom de Microsoft.
Pour réaliser ceci je me suis appuyée sur un exemple de la
MSDN nommée : VCTERM.
<!--[if !supportEmptyParas]--><!--[endif]-->Jai donc commencé a développer un pre-ActiveX dans le quel
jai crée toute mes fonctions et traitements. Une fois ce pre-ActiveX crée et fonctionnant
parfaitement jai crée lActiveX. Celui-ci réaliser et compilé jai voulu le tester.
<!--[if !supportEmptyParas]-->
Et ô surprise il ne marche pas. En effet au moment ou je
veut instancié mon composant dans un autre projet (sous VB6) celui-ci me fait
une belle erreur windows.
<!--[endif]-->
Apres quelque test et recherche jai découvert que cest une
instruction qui ma été fournie par lexemple Windows qui fait tout
plantée :
<!--[if !supportEmptyParas]--> <!--[endif]-->// Création de
l'objet MSCOMM32 OLE Control.
->> if
(!m_commctrl.Create(NULL,0,CRect(0,0,0,0),this,ID_COMMCTRL))
{
TRACE0("Echeque de la création
du composant MSComm \n");
return -1;
}
<!--[if !supportEmptyParas]--> Ce qui me parait bizarre cest que cette instruction
fonctionne parfaitement sous un projet dapplication MFC et pas pour un projet
ActiveX MFC.
<!--[if !supportEmptyParas]--><!--[endif]--> Si quelquun a une idée de comment résoudre ce problème
<!--[if !supportLists]-->1)<!--[endif]-->Lors de la création du projet de type MFC ActiveX Control, dans
les options de lassistant, sélectionnez Acts as a simple frame control (à vérifier, cette
option nest peut-être pas nécessaire).
<!--[if !supportLists]-->2)<!--[endif]-->Générez le projet, et rajoutez un appel à AfxEnableControlContainer dans la méthode InitInstance de la classe Application.
BOOL CmfcTestApp::InitInstance()
{
BOOL bInit = COleControlModule::InitInstance();
AfxEnableControlContainer();
if (bInit)
{
// TODO: Add your own module initialization code
here.
}
return
bInit;
}
3)<!--[endif]-->Rajoutez une classe encapsulant le contrôle ActiveX ( dans mon
cas : mscomm32.ocx)
4)<!--[endif]-->Initialisez lactiveX en appelant sa méthode Create lors du premier appel de OnDraw.