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
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 ?
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