¿cómo se puede usar un Safearray
para pasar una matriz de tipos personalizados (una clase que contiene solo propiedades) de C++ a C#? ¿Está utilizando el VT_RECORD
la forma correcta de hacerlo?Pasar un Safearray de tipos personalizados de C++ a C#
Estoy tratando de la siguiente manera, pero
la referencia a la variedad de clases llega al código administrado como NULL.SafeArrayPutElement
devuelve un error al intentar llenar el safearray
tengo algo como lo siguiente en el mundo administrado:
[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; }
}
mundo no administrado:
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]++;
}
Tenga en cuenta que la opción Soy capaz de utilizar la SafeArray
pase a otras matrices de BSTR
sin problemas entre las dos aplicaciones. Entonces esto es algo peculiar para pasar una estructura.
Stefano
¿Cuál es el error? – fretje