Bonjour à tous,

Voici quelques jours que je galère pour réaliser mes allocations mémoires, mon problème étant que ma structure peut contenir d'autres structures..
Au niveau d'un composant(à l'intérieur d'un même binaire), tout se passe pour le mieux-je pense-, seulement, une fois transféré à un autre composant, la structure global est bien là et allouée correctement, par contre, la structure dans la structure ne ressemble plus à rien..

Un petit exemple de code pour illustrer mes propos:

D'abord, la structure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
typedef struct{
char*  NameVoiture;
int      NumPlaque;
}sVoiture;

typedef struct{
sVoiture   Voitures*;
int          NbVoitures;
char*     NomParking;
}sParking
Déclaration de l'IDL + l'appel côté client:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
// IDL:
HRESULT GetVoitures([out] unsigned long* SizeStruct ,[out, size_is( ,*SizeStruct)] byte** m_Parking);

// appel côté client:
unsigned long SizeStruct;
SizeStruct = sizeof(m_Parking);
sParking* m_Parking = NULL;

HRESULT hr = GetVoitures(&SizeStruct, (byte**)&m_Parking );
Maintenant côté serveur, voici comment je remplis la structure:
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
....GetVoitures(ULONG* cbOut, byte** p_voit)
{
     
      *p_voit = (byte*)CoTaskMemAlloc(sizeof(sParking));
	sParking* temp;
	temp = reinterpret_cast<sParking*>( *p_voit );
        *cbOut = sizeof(sParking);

        ....

        temp->Voitures = CoTaskMemAlloc(temp->nbVoitures * sizeof(sVoitures));

        .....

       // Même principe pour le char* nom
       for(int i = 0; i < temp->nbVoitures; i++)
       {
           *cbOut += sizeof(sVoitures);
           *cbOut += strlen(nomdelavoiture)+1;
           temp->Voitures[i].NameVoiture = CoTaskMemAlloc(strlen(nomdelavoiture)+1);
       }

       ....

      // Donc ici, Côté Serveur, la structure semble être correctement remplie.
      // Par contre, lors du retour côté client, j'ai bien accès par exemple au nombre de voitures (présent à la 'racine' de la structure) mais par contre, je ne sais plus énumérer les voitures ni consulter leurs noms :(
}
Vous l'aurez compris, j'ai essayé de fournir un exemple le plus général et le plus simplifié possible..

Ma première question: Je ne suis pas un familier de l'IDL ni de COM/DCOM, donc, est ce que mes initialisations vous semblent corrects?
La façon dont je remplis ma structure côté serveur aussi?

Ma deuxième question: Qu'est ce qui pourrait bien foirer?


Merci à vous