簡體   English   中英

通過在C#中導入DLL重新使用C ++函數

[英]Re-using C++ functions by importing DLL in C#

將C ++創建的DLL導入C#時遇到一般性問題。

1)我已經編寫了利用指針(例如雙指針,指針數組等)的C ++函數。例如static int someFunc(char *var[])如何重用它們,因為C#不支持指針。

2)我需要通過C#中的[DllImport()]公開所有功能嗎? 即我有一個名為someFunc的函數,該函數在內部調用其他函數。 我是否也應該在“ DllImport”下公開這些功能

3)誰能解釋為什么我需要處理C#中的非托管代碼,尤其是當我從C ++導入dll時?

要點1答案:在C#中的函數聲明中使用unsafe關鍵字

static unsafe int someFunc(char* var[]);

要點2答案:無需導入所有功能。 只導入someFunc()

第3點答案:C#使用托管的代碼,該代碼是安全類型的,並且指向某些有效的內存位置。 但是,C ++中的指針可能會或可能不會指向任何有效的內存位置。 因此,您需要使用C#處理非托管代碼。

C#確實在不安全區域中支持指針,但是,您也可以使用IntPtr,它類似於C ++的void * DllImport,其中IntPtr作為參數或返回值。

但是,正確的做法是使用封送處理將char *自動轉換為System.String,反之亦然。 (並將char *數組轉換為字符串數組 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM