Wie kann man ein Safearray
verwenden, um ein Array von benutzerdefinierten Typen (eine Klasse, die nur Eigenschaften enthält) von C++ an C# übergeben? Verwenden Sie den VT_RECORD
Typ den richtigen Weg, es zu tun?Übergeben eines Safearray von benutzerdefinierten Typen von C++ zu C#
ich in der folgenden Art und Weise bin versucht, aber
die Referenz auf das Array von Klassen an den verwalteten Code als NULL wird zu füllen.SafeArrayPutElement
gibt einen Fehler beim Versuch, die Safearray
Ich habe so etwas wie die folgenden in der verwalteten Welt:
[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; }
}
Unmanaged Welt:
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]++;
}
Bitte beachten Sie, dass die ich bin in der Lage verwenden die SafeArray
andere Anordnungen von BSTR
mit nicht passieren Probleme zwischen den beiden Anwendungen. Das ist etwas, was dem Übergeben einer Struktur eigen ist.
Stefano
Was ist der Fehler? – fretje