に渡す方法Safearray
を使用して、カスタムタイプの配列(プロパティのみを含むクラス)をC++からC#に渡すにはどうすればよいですか? VT_RECORD
タイプを正しい方法で使用していますか?カスタムタイプのSafearrayをC++からC#
私は次のようにしていますが、
クラスの配列への参照はNULLとしてマネージコードに取得されます。SafeArrayPutElement
はsafeearrayを埋めるときにエラーを返します
私は管理の世界で、次のようなものがあります。
[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; }
}
管理されていない世界:
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]++;
}
をノーとBSTR
の他の配列を渡すことができ、使用SafeArray
だということに注意してください2つのアプリケーション間の問題これは構造を渡すことに特有のものです。
ステファノ
エラーは何ですか? – fretje