comment peut-on utiliser un Safearray
pour passer un tableau de types personnalisés (une classe contenant uniquement les propriétés) de C++ C#? Est-ce que l'utilisation du type VT_RECORD
est la bonne façon de le faire?Le passage d'un SAFEARRAY de types personnalisés de C++ C#
J'essaye de la façon suivante, mais
la référence au tableau de classes obtient le code managé comme NULL.SafeArrayPutElement
renvoie une erreur en essayant de remplir le safearray
J'ai quelque chose comme ce qui suit dans le monde géré:
[ComVisible(true)]
public interface IStatistics
{
double Mean { get; set; }
double StdDev { get; set; }
}
[Serializable]
[ComVisible(true)]
public class Statistics : IStatistics
{
public Mean { get; set; }
public double StdDev { get; set; }
}
monde Unmanaged:
HRESULT hr = CoInitialize(NULL);
...
SAFEARRAY *pEquationsStatistics;
// common dimensions for all arrays
SAFEARRAYBOUND dimensions[1];
dimensions[0].cElements = 2;
dimensions[0].lLbound = 0;
pEquationsStatistics = SafeArrayCreate(VT_RECORD, 1, dimensions);
...
for (long i = 0; i < dimensions[0].cElements; i++)
{
long indices[1];
indices[0] = 0;
...
// Equation statistics
IStatisticsPtr pIStatistics(__uuidof(Statistics));
pIStatistics->PutMean(1.0); // so far so good
result = SafeArrayPutElement(pEquationsStatistics, indices, pIStatistics);
...
indices[0]++;
}
S'il vous plaît noter que le je pu utiliser le SafeArray
pour passer d'autres tableaux de BSTR
sans problèmes entre les deux applications. Donc, c'est quelque chose de particulier à passer une structure.
Stefano
Quelle est l'erreur? – fretje