Bonjour, j'ai une dll (dont je ne suis pas propriétaire) qui a notamment l'interface suivante :
J'aimerais pouvoir utiliser une méthode de cet interface (Connect en l'occurence) et donc instancier une classe qui implémentera l'interface.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
31
32 dispinterface IScoutManagementSession { properties: methods: [id(0x00000001)] VARIANT_BOOL Disconnect(); [id(0x00000002)] IDispatch* GetServerLogManager(); [id(0x00000003)] VARIANT_BOOL GetConnectionStatus(); [id(0x00000004)] IDispatch* GetProfileManager(); [id(0x00000005)] VARIANT_BOOL Connect( BSTR sServerName, short nPort, BSTR sPassword); [id(0x00000006)] BSTR GetLastErrorText(); [id(0x00000007)] short GetLastErrorNum(); [id(0x00000008)] IDispatch* GetServerSettingManager(); [id(0x00000009)] IDispatch* GetServiceManager(); [id(0x0000000a)] IDispatch* GetBatchManager(); [id(0x0000000b)] IDispatch* GetDeviceManager(); [id(0x0000000c)] IDispatch* GetInstallManager(); };
Le problème, c'est qu'avec les IDispatch, les IMPLEMENT_DYNCREATE, les COleDispatchDriver, je n'arrive toujours pas à déclarer un objet qui me crée une instance de cette interface IScoutManagementSession , une idée comment faire svp ?
J'ai testé en faisant :
Mais ça ne marche pas évidemment, le compilo ne me reconnait pas GetConnectionStatus car m_session est un COleDispatchDriver et n'a donc pas les méthodes de l'interface.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
31 class ScoutSessionMgr { public: explicit ScoutSessionMgr (); virtual ~ScoutSessionMgr (); bool InitInstance (); private: COleDispatchDriver m_Session; }; ScoutSessionMgr::ScoutSessionMgr () { } ScoutSessionMgr::~ScoutSessionMgr () { } bool ScoutSessionMgr::InitInstance () { HRESULT hr = CoInitialize (NULL); m_Session.CreateDispatch (LPCTSTR("ScoutManagement.ScoutManagementSession")); if (m_Session.GetConnectionStatus()) { m_Session.Disconnect (); return true; } else { return (m_Session.Connect ("128.1.208.219", 8026, ""); } return true; }
Partager