我想使用C++創建一個dll,它具有通過使用C++ new
創建一個數組,創建一個.bmp圖像,填充它,然後返回指針。 我想在c#項目中使用這個函數,但是如何在使用它之後刪除這個數組?使用dll創建數組在c中使用#
我在我的dll中創建了另一個函數,它接收到一個指針並且它是delete[]
嗎?
或者有沒有辦法直接刪除C#中的數組?
或c#在超出作用域時自動刪除它?
我想使用C++創建一個dll,它具有通過使用C++ new
創建一個數組,創建一個.bmp圖像,填充它,然後返回指針。 我想在c#項目中使用這個函數,但是如何在使用它之後刪除這個數組?使用dll創建數組在c中使用#
我在我的dll中創建了另一個函數,它接收到一個指針並且它是delete[]
嗎?
或者有沒有辦法直接刪除C#中的數組?
或c#在超出作用域時自動刪除它?
您需要創建另一個函數來刪除指針。 C#在超出作用域時不會自動刪除它,並且Microsoft公開了一些刪除對象的方法,但它們是針對窗口句柄的。 E.x .: Marshal.FreeHGlobal。
如果您的dll包含unmanaged code
,C#(.NET)不會自動刪除指針(釋放分配的內存)。釋放非託管資源是您的責任(如果您自己創建並使用任何非託管資源,.NET可以在幕後爲您執行此操作,但您的情況不盡相同)。但是,即使您手動釋放這些資源(您的情況下分配的內存),您應該考慮在您的dll中提供自定義方法,而不是直接在調用方部分中調用delete。混合不同的CRT版本和環境並不是一個好的做法。要了解爲什麼請訪問此link。最好在你的dll中編寫自定義的分配器/釋放器並將它們用於對象管理。
您必須導出一個可以讓您再次刪除的功能。否則在C風格的界面中很常見,這就是*柄*的全部內容。 –