C# 透過 DllImport 的方式讓你可以直接使用 C/C++ DLL 的 function,C/C++ 的程式常使用 struct 來儲存 data ,C# 也提供了讓你在 C# 中 define struct layout,這個轉換方式可以在 C# 中,直接宣告一個 struct 變數,丟入 DLL 中使用。
這點跟 Python 其實滿像的,Python 有 ctypes 可以做到類似的行為。script 中的 memory 跟 C/C++ 的 memory 無法互通,都必須透過轉換的方式讓 interpreter 可以順利看得懂 memory buffer。
C# 單一個 struct buffer 使用上都沒什麼問題,但是當你試著想要從 DLL 中撈回一串 struct array buffer時,就無法用直覺的方法完成這件事。因為 C# 在 DllImport 時的參數傳遞動了點手腳,所以如果直接將 C# 的 struct array 加 ref 傳至 DLL 可能會導致 crash 的產生。