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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
      IntPtr[] StrPtr = new IntPtr[8];
Pratiquement ca marche bien (code ci dessous)
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;
    }