2008-11-19 8 views
1

Je crée un contrôle ActiveX qui sera utilisé dans les pages Web pour interroger la version installée actuelle d'un logiciel tiers sur l'ordinateur client. Le contrôle a seulement besoin d'exposer une seule méthode - GetVersion - qui renvoie la version sous la forme d'un entier. Je suis très inexpérimenté avec ActiveX, et j'ai des problèmes avec quelque chose d'aussi simple que de renvoyer correctement les valeurs des méthodes. Si j'utilise la déclaration suivante dans le IDL:Renvoi d'une valeur d'une méthode dans un contrôle ActiveX

[id(1)] void GetVersion(); 

Associé à la mise en œuvre suivante:

BEGIN_DISPATCH_MAP(CDetectorCtrl, COleControl) 
    DISP_FUNCTION_ID(CDetectorCtrl, "GetVersion", 1, GetVersion, VT_EMPTY, VTS_NONE) 
END_DISPATCH_MAP() 

void CDetectorCtrl::GetVersion() 
{ 
    MessageBox(L"Test"); 
} 

je peux appeler la méthode de HTML et de voir mon MessageBox très bien.

Mais si je change la définition/code:

[id(1)] int GetVersion(); 

et

BEGIN_DISPATCH_MAP(CDetectorCtrl, COleControl) 
    DISP_FUNCTION_ID(CDetectorCtrl, "GetVersion", 1, GetVersion, VT_INT, VTS_NONE) 
END_DISPATCH_MAP() 

int CDetectorCtrl::GetVersion() 
{ 
    MessageBox(L"Test"); 
    return 1337; 
} 

je reçois un accident lorsque j'invoquez la méthode de HTML.

Répondre

1

de réponse ...

Le problème est apparu à un AFX_MANAGE_STATE manquant dans la méthode elle-même:

LONG CDetectorCtrl::GetVersion(void) 
{ 
    AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
    return 1337; 
} 
Questions connexes