Bonjour, j'ai une dll (dont je ne suis pas propriétaire) qui a notamment l'interface suivante :
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();
    };
J'aimerais pouvoir utiliser une méthode de cet interface (Connect en l'occurence) et donc instancier une classe qui implémentera l'interface.
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 :
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;
}
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.