Ho un metodo di libreria C++ che vorrei chiamare da uno script Unity C#.Passaggio di un array di byte da Unity C# a un metodo di libreria C++
Capisco che ci sono tre passaggi chiave. Innanzitutto, dichiarare i metodi C++ come extern "C"
. In secondo luogo, per utilizzare prima della dichiarazione del metodo extern C# corrispondente. Terzo, per denominare il file della libreria con il prefisso lib (ad esempio libfoobar.so
) e inserirlo nella cartella dei plugin Unity.
Fin qui tutto bene, se sto passando solo tipi di parametri semplici come int
da C# a C++. Tuttavia, per passare un parametro byte[]
, dovrò tenere conto dei diversi modi in cui C# e C++ gestiscono la memoria e i puntatori. Non sono stato in grado di trovare un esempio definitivo su come farlo.
La mia domanda: come passare uno byte[]
da uno script Unity C# in un metodo di libreria C++ esterno?
È questo il P/Invoke metodo? Puoi anche usare C++ CLI. Ho sentito che C++ CLI ti dà più controllo. Ma non l'ho mai fatto. Prendilo con un granello di sale. –
Non dimenticare 'CallingConvention = CallingConvention.Cdecl' da DllImport dato che stai usando' extern "C" ' – cubrr
@Golazo - non usando P/Invoke, semplicemente dichiarando che l'extern di C++ è" extern "C" 'e facendo riferimento a C# tramite l'attributo 'DllImport'. Non è necessario alcun P/Invoke, almeno per non passare in tipi di parametri semplici. – Ghopper21