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 : 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 #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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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 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![]()
Partager