Я размещаю библиотеку .NET в моей программе на C ++, используя следующие методы, но не полный список:
CorBindToRuntimeEx()
GetDefaultDomain()
CreateInstance()
GetIDsOfNames()
И, в конечном итоге, вызов Invoke()
.
Это прекрасно работает для базовых типов, перечислений, строк и массивов.Тем не менее, я не могу понять, как передать структуру.Вот скелет того, что у меня сейчас:
//library.cs
public class AStruct
{
public int i1;
public string s1;
public double d1;
}
//...
public AStruct getAStruct();
//interop.cpp
HRESULT hr = assembly->Invoke (id_getAStruct, ...);
Возвращаемое значение OUT PARAM
этой функции - VARIANT
с типом VT_DISPATCH
.
Когда я смотрю retVal.pdispVal
в моем отладчике я вижу, что содержимое моей структуры не близко к этому адресу.Я хотел бы использовать varIDis.pdispVal->QueryInterface()
для доступа к моей структуре, но я понятия не имею, что такое IID
, и как его обнаружить.
Кроме того, у меня нет исходного кода дляБиблиотека .NET, хотя я могу видеть многое из этого с помощью Reflector.Я использую тестовую библиотеку, написанную в .NET, чтобы понять, как действовать.
Итак, как я могу передавать и получать структуры между .NET и C ++ с помощью COM?
Большое спасибо.