Depuis quelques jours, j'ai essayé de Marshal une structure complexe de C++ à C#, fondamentalement, j'ai réussi à obtenir la plupart de ce que j'essaie de réaliser mais maintenant je suis coincé essayer de rassembler ce que je crois est une liste.Structure de complexe de C++ à C#
Dans l'exemple, je vais inclure ce que je fais travailler et où je suis coincé.
public: void __thiscall TransactionModule_t::GetTransaction(class Identity_t const &)const
comme follwoing Conformi:
// public: void __thiscall TransactionModule_t::GetTransaction(class Identity_t const &)const
[DllImport("Transaction.dll", EntryPoint = "[email protected][email protected]@[email protected]@@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;
}
}
Cela fonctionne très bien.
Cependant, je veux appeler une méthode qui me donne la liste.
public: void __thiscall TransactionModule_t::GetTransactions(class std::vector<class Identity_t,class std::allocator<class Identity_t> > &)const
Et où je suis rester coincé:
// 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);
J'ai essayé de faire une classe qui correspond entre les deux. Est-il même possible d'appeler cette méthode? Ai-je oublié quelque chose ici?
La numérisation fonctionne lorsque les deux parties peuvent comprendre la structure et le mécanisme d'accès des données qui sont transmises d'avant en arrière. C# ne comprendra pas la structure et le mécanisme d'accès des vecteurs. – sameerkn