Bonjour,
Je fait une dll C++ dans laquelle je définis des structures (UDT) et je veux créer un tableaux de cette structure.
Pour cela je vais utiliser les SAFEARRAY et une fois que j'aurais récupérer le IRecordInfo de ma structure je pense que ça sera facile.
Mon problème est que je n'arrive pas à récupérer mon IRecordInfo alors que je vois bien ma structure dans le fichier .tlb associé à mon projet.
Voilà mon fichier .idl:
Mon fichier .h:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #define _BIND_TO_CURRENT_VCLIBS_VERSION 1 import "oaidl.idl"; import "ocidl.idl"; [ uuid(703E4E1C-464D-4b4b-AB9E-0F564E6B2AF9), version(1.0) ] library MyLIB { typedef [uuid(8B892E66-7DAA-414C-B782-1642D9E27A22)] struct Data { int n; SAFEARRAY(double) x; } Data; }
Mon fichier .cpp:Code:
1
2
3
4
5
6
7
8
9
10 #define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \ const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} EXTERN_C const IID LIBID_MyLIB; typedef /* [uuid] */ DECLSPEC_UUID("8B892E66-7DAA-414C-B782-1642D9E27A22") struct Data { int n; SAFEARRAY * x; } Data;
Le code est un extrait de mon projet.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 DEFINE_GUID(LIBID_MyLIB, 0x703E4E1C, 0x464D, 0x4b4b, 0xAB, 0x9E, 0x0F, 0x56, 0x4E, 0x6B, 0x2A, 0xF9); MIDL_DEFINE_GUID(IID, LIBID_MyLIB, 0x703E4E1C, 0x464D, 0x4b4b, 0xAB, 0x9E, 0x0F, 0x56, 0x4E, 0x6B, 0x2A, 0xF9); double __stdcall Test() { IRecordInfo* pRecInfo = NULL; LPTYPELIB pTypelib = NULL; HRESULT hr; hr = LoadRegTypeLib(LIBID_MyLIB, 9, 9, GetUserDefaultLCID(), &pTypelib); if (pTypelib) { ITypeInfo *pTypeInfo = NULL; hr = pTypelib->GetTypeInfoOfGuid(IID_ST_TestResult, &pTypeInfo); if (pTypeInfo) return 2; return 1; } return 0; }
Je ne souhaite pas inclure le fichier généré _h.h et c'est pour cela que je cherche à utiliser une manière détourné de faire mon affaire.
Ma fonction me retourne 1 et je n'arrive pas à comprendre pourquoi ma structure n'est pas trouvée.
Auriez-vous des pistes ou des explications s'il vous plaît?
Merci :)