Bonjour
Je fais une operation un peu acrobatique qui est de recuperer un tableau de string donnés par une DLL sous la forme d"un char **
C'est la DLL qui gere ses buffer et son allocation
En csharp Je déclare le tableau de pointeurs de pointeur sous la forme d'un tableau de IntPtr
Pratiquement ca marche bien (code ci dessous)
Code : Sélectionner tout - Visualiser dans une fenêtre à part IntPtr[] StrPtr = new IntPtr[8];
Le truc qui m'embete c'est normalement je ne devrais pas donner de dimension a mon tableau puisque la DLL va simplement assigner a l'adresse de base de mon tableau l'adresse de son buffer et rendre un count.
Comment puis-je declarer un array de IntPtr sans le dimensionner et sans facher le compilateur ?
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 [DllImport("bcta.Dll")] static public extern int bctaGetName(IntPtr hBcta, UInt32 nAttID, ref IntPtr [] StrPtr); static public int TestName() { char ch = (char)1; IntPtr hBcta = (IntPtr)0; UInt32 attrId = 0; UInt32 attrVal = 0; int status; IntPtr[] StrPtr = new IntPtr[8]; Routing.bctaOpen(ref hBcta, Environ.RoutingDataPath, ch); attrId = 8967209; status = bctaGetName(hBcta, attrId, ref StrPtr); string val = Marshal.PtrToStringAnsi(StrPtr[0]); Routing.bctaClose(hBcta); return 0; }
Partager