Bonjour,

Je cherche à suivre un article de Jeff Glatt concernant la programmation COM en C : http://www.codeproject.com/Articles/...COM-in-plain-C

Je ne vais pas très loin dans l'article avant d'avoir quelques difficultés. En fait tout va bien jusqu'à l'exemple de code 14, ou l'auteur décide que les fonctions doivent accéder aux membres "count" et "buffer" de la structure utilisée pour les appeler.
Le compilateur n'accepte pas le code que j'ai tapé, ce qui ne m'étonne pas du tout car on référence des éléments non encore déclarés.

Sauf que j'ai essayé de changer l'ordre des déclarations dans tous les sens, je référence toujours un élément qui est déclaré ensuite.

Je ne vois pas comment on peut faire fonctionner tout cela.
Pourriez-vous m'expliquer comment on doit faire, car si l'auteur réussis, ce doit donc venir de moi.

Merci


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
43
44
45
46
47
48
49
 
/* Jeff Glatt COM in Plain C article #1
   error checking omited                */
#include <Windows.h>
#include <windef.h>
#include <WinBase.h>
 
typedef long SetStringPtr(IExample*, char *);
typedef long GetStringPtr(IExample*, char *, long);
 
typedef struct {
	SetStringPtr *SetString;
	GetStringPtr *GetString;
} IExampleVtbl;
 
typedef struct {
	IExampleVtbl *lpVtbl;
	DWORD count;
	char buffer[80];
} IExample;
 
long SetString(IExample *this, char * str)
{
	return 0;
}
 
long GetString(IExample *this, char *buffer, long length)
{
	return 0;
}
 
int main(int argc, char **argv)
{
	static const IExampleVtbl IExample_Vtbl = { SetString, GetString };
	IExample *example;
	char *buffer;
 
	example = (IExample *)GlobalAlloc(GMEM_FIXED, sizeof(IExample));
	buffer = (char *)GlobalAlloc(GMEM_FIXED, 255);
 
	example->lpVtbl = &IExample_Vtbl;
	example->count = 0;
	example->buffer[0] = 0;
 
	long value1 = example->lpVtbl->SetString(example, "Some Texte");
	long value2 = example->lpVtbl->GetString(example, buffer, 255);
 
	return 0;
}