Я заинтересован в вызове фрагмента кода .NET из моего кода C ++.Код .NET разбит на отдельные dll, скомпилированные с помощью ', генерируют COM видимый ', он состоит из метода, который принимает список структуры 'item'.
Примерно так:
struct item {
int a;
int b;
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public interface Ifoo {
int GetFoo(ref IntPtr items,int nItems);
}
public class foo : Ifoo {
int GetFoo(ref IntPtr items,int nItems)
{
for (int ix = 0; ix < numMatches; ix++)
{
it = (item)Marshal.PtrToStructure((IntPtr)((long)items + Marshal.SizeOf(typeof(item))*ix)),typeof(item));
}
}
}
В части c ++ у меня есть нечто похожее на это ..
std::vector<struct> foo;
foo.push_back(stru1); // stru1 is initialized anywhere...
foo.push_back(stru2); // and so on...
netInstance->GetFoo(reinterpret_cast<long*>(foo.data()),foo.size());
Но это не работает ... все, что я получаю, это исключение памяти ..
Я также пробовал другие подходы, такие как SAFEARRAY, но кажется, что он не работает с пользовательскими структурами ..
Спасибо!