salut
petite question:lol:
ext ce que je peux remplacer CoCreateInstance par new pour créer une instance dans C++?
qd je l'utilise
ça me génère une erreureCode:
1
2
3
4 Emulation *pEmul; pEmul=new Emulation();
merci d'avance:D
Version imprimable
salut
petite question:lol:
ext ce que je peux remplacer CoCreateInstance par new pour créer une instance dans C++?
qd je l'utilise
ça me génère une erreureCode:
1
2
3
4 Emulation *pEmul; pEmul=new Emulation();
merci d'avance:D
CoCreateInstance sert à créer un objet au sens COM/DCOM du terme
new sert à créer un objet au sens C++/Objet du terme
Ce n'est pas du tout la même chose donc non, tu ne peux pas
salut
bah le pb c'est ke moi je veux créer un objet COM :oops:
g créer l'objet "Emulation" d un prog C++
et puis je l'ai appelé depuis VB et ç là ke ça plante voici le code vbCode:
1
2
3
4
5
6
7
8 HRESULT hr = CoInitialize(NULL); Emulation *pEmul ; // pEmul=new Emulation(); hr = CoCreateInstance(CLSID_Emulation, NULL, CLSCTX_INPROC_SERVER, __uuidof(IEmulation),(LPVOID *) &pEmul );
et ça plane au niveau de la deuxième iteration :evilred:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Set objWMAObject = CreateObject("test2.Application") Dim i As Long i = 0 objWMAObject.test (5) Do i = i + 1 Set objWMAEmul = objWMAObject.Emul MsgBox (objWMAEmul.xxx) Set objWMAEmul = Nothing Loop Until i = 5
merci d'avance
Tu ne nous en dit pas assez.
De plus, ton pointeur est de type Emulation alors que tu demandes une IEmulation...
J'ignore comment est implémentée ta classe COM, mais:
- Le client ne devrait même pas connaître le type Emulation
- Si la classe COM est implémentée par la technique des classes C++ imbriquées, tu vas droit dans le décor.
bah oui :oops:
la classe COM est implémentée par des classes C++ imbriquées
g en fait un objet Application qui est le début et au sein g Emulation
en fait g mnt utilisé creataInstance au lieur de coCrezateInstance et le trus des 3 niveaus marche bien en VBCode:
1
2
3
4
5
6 STDMETHODIMP Application::get_Emul(IEmulation **pVal) { *pVal=Emul; return S_OK; }
mais en fait qd j'ajoute le set ds la boucle ça se plante par ce ke moi je veux créer plusieurs " objWMAObject.Emul.xxx"Code:
1
2 MsgBox (objWMAObject.Emul.xxx)
Merci bcp :D:DCode:
1
2
3
4
5
6
7
8
9
10
11 Do i = i + 1 Set objWMAEmul = objWMAObject.Emul MsgBox (objWMAObject.Emul.xxx) ' Set objWMAEmul = Nothing Loop Until i = 5
Dans ce cas, c'est que ton code de release ou de destruction est foireux.
mais moi je ne veux pas détruire mon objet
si on utlise Release() après CreateInstance mon poiteur est vide n'est ce pas ? :roll:
et moi je veux avoir plusieurs instance de l'objet
Code:
1
2
3
4
5
6
7
8 Do i = i + 1 Set objWMAEmul = objWMAObject.Emul MsgBox (objWMAObject.Emul.xxx) Loop Until i = 5
Si tu fais Set objWMAEmul=Nothing, cela fera un Release() du précédent objet...
est ce que c'est à dire ke c la même chose ?
par ce qu'en fait j'utilisais "Set objWMAEmul = Nothing" mais ça plantais aussi.:?:?
qd g utlisé release mnt, il me donne une erreure debug et si je l'ignore je peux exécuter le reste mais je crois que c le même truc objWMAEmul
Code:
1
2 objWMAObject.test (5)
par ce que je reçoit ds toutes les MsgBox le même resultat or il faut ke change après le passage de chaque set , n'est ce pas ?Code:
1
2
3
4 Set objWMAEmul = objWMAObject.Emul MsgBox (objWMAObject.Emul.xxx)
la première fois il faut ke ça me donne un 5 avec l'appel de objWMAObject.test (5)
mais les autres du n'importe koi puiske je crée un nouveau objWMAEmul
merci bcp :lol::oops: