come è possibile utilizzare uno Safearray
per passare una matrice di tipi personalizzati (una classe contenente solo proprietà) da C++ a C#? Sta usando il VT_RECORD
tipo il modo giusto per farlo?Passaggio di un Safearray di tipi personalizzati da C++ a C#
sto cercando in questo modo, ma
il riferimento alla matrice di classi arriva al codice gestito come un valore NULL.SafeArrayPutElement
restituisce un errore quando si cerca di riempire il SAFEARRAY
ho qualcosa di simile al seguente nel mondo gestito:
[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; }
}
mondo non gestito:
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]++;
}
Si prega di notare che l'io sono in grado di utilizzare il SafeArray
di passare altri array di BSTR
senza problemi tra le due applicazioni. Quindi questo è qualcosa di peculiare al passaggio di una struttura.
Stefano
Qual è l'errore? – fretje