Bonjour,
Je cherche à créer un SafeArray de BSTR afin de renvoyer un tableau contenant des adresses IP via COM.
Pour l'instant, je fais comme ça, mais ça ne marche pas :
addrTemp contient bien une @IP. Mais au premier SafeArrayPutElement le programme plante.
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
33
34
35
36
37
38
39
40
41
42 //Méthode renvoyant un tableau d'adresse IP STDMETHODIMP TGestionnaireCOMImpl::get_serverList(LPSAFEARRAY* list) { LPSAFEARRAY lpsa; WideString tmp; BSTR addrTmp; AnsiString texte; //Ouverture du fichier .ini contenant les @IP TIniFile * iniFile = new TIniFile(ChangeFileExt(Application->ExeName,".INI")); //lecture TStringList * section = new TStringList; iniFile->ReadSection("serverAddress", section); //on créé le vecteur (SafeArray) lpsa = SafeArrayCreateVector(VT_BSTR, 0, section->Count); if(lpsa == NULL) { texte = "lpsa = NULL"; Form3->Memo1->Lines->Add(texte); } //on le remplit long Position; for(int i=0; i<section->Count; i++) { Position = i; tmp = section->operator [](i); addrTmp = tmp.c_bstr(); HRESULT reponse = SafeArrayPutElement(lpsa, &Position, &addrTmp); analyseReponse(reponse, "SafeArrayPutElement"); } //on copie et on detruit SafeArrayCopy(lpsa, list); SafeArrayDestroy(lpsa); return S_OK; }
Je pense que le problème vient du fait que quand je créé le tableau, je lui indique que la taille des "cases" est VT_BSTR et quand je le rempli, le BSTR est plus gros que la case alloué.
Si quelqu'un sait comment faire...
Partager