几天以来,我一直试图将一个复杂的结构从C ++元素化为C#,基本上我已经设法完成了我想要完成的大部分工作,但现在我不得不试图整理我认为的是一个清单。
在示例中,我将包括我的工作以及我被困在哪里。
public: void __thiscall TransactionModule_t::GetTransaction(class Identity_t const &)const
符合以下条件:
// public: void __thiscall TransactionModule_t::GetTransaction(class Identity_t const &)const
[DllImport("Transaction.dll", EntryPoint = "?GetTransaction@TransactionModule_t@@Identity_t@@@Z", CallingConvention = CallingConvention.ThisCall)]
public static extern void GetTransaction(IntPtr iPtr,[Out, MarshalAs(UnmanagedType.LPStruct)] Identity transaction);
[StructLayout(LayoutKind.Sequential)]
[Serializable]
public class Identity
{
public uint Id;
public uint Type;
public Identity(uint id = 0, uint type = 0)
{
this.Id = id;
this.Type = type;
}
}
这很好用。
但是我想调用一个给我列表的方法。
public: void __thiscall TransactionModule_t::GetTransactions(class std::vector<class Identity_t,class std::allocator<class Identity_t> > &)const
我陷入困境的地方:
// public: void __thiscall TransactionModule_t::GetTransactions(class std::vector<class Identity_t,class std::allocator<class Identity_t> > &)const
[DllImport("Transaction.dll", EntryPoint = "long mangled entry point", CallingConvention = CallingConvention.ThisCall)]
public static extern void GetTransactions(IntPtr iPtr,[Out] Transactions transactions);
我尝试创建一个适合两者之间的课程。
[StructLayout(LayoutKind.Sequential)]
[Serializable]
public class Transactions
{
public Identity Identity;
public Identity[] List;
}
甚至可以调用此方法,我在这里遗漏了什么吗?
答案 0 :(得分:0)
甚至可以调用此方法吗?
不,不是。您无法从C#代码提供std::vector
。
实际上你需要一个C ++ / CLI包装器。