Mam metodę biblioteki C++, którą chciałbym wywołać ze skryptu Unity C#.Przekazywanie tablicy bajtów z Unity C# do biblioteki w bibliotece C++
Rozumiem, że są trzy kluczowe kroki. Najpierw zadeklaruj metody C++ jako extern "C"
. Po drugie, aby użyć przed odpowiednią deklaracją metody ex-C#. Po trzecie, aby nazwać plik biblioteki z prefiksem lib (np. libfoobar.so
) i umieścić go w folderze wtyczek Unity.
Jak dotąd tak dobrze - jeśli przechodzę tylko proste typy parametrów, takie jak int
z C# do C++. Jednak aby przekazać parametr byte[]
, będę musiał wziąć pod uwagę różne sposoby obsługi pamięci i wskaźników C# i C++. Nie byłem w stanie znaleźć ostatecznego przykładu, jak to zrobić.
Moje pytanie: jak przekazać byte[]
ze skryptu Unity C# do zewnętrznej biblioteki C++?
Czy to P/Invoke metoda? Możesz także użyć interfejsu CLI w języku C++. Słyszałem, że CLI języka C++ zapewnia większą kontrolę. Ale nigdy tego nie robiłem. Dodaj szczyptę soli. –
Nie zapomnij o 'CallingConvention = CallingConvention.Cdecl' z twojego DllImport, ponieważ używasz' zewnętrznego 'C" ' – cubrr
@Golazo - nie używając P/Invoke, po prostu deklarując C++ jako" extern "C" 'i odwoływanie się do niego z C# za pomocą atrybutu 'DllImport'. Żadne P/Invoke nie jest potrzebne, przynajmniej aby nie przekazywać prostych typów parametrów. – Ghopper21