C#調用c++Dll結構體數組指針的問題

 

    C#調用c++dll文件是一件很麻煩的事情,首先面臨的是數據類型轉換的問題,相信經常做c#開發的都和我一樣把學校的那點c++底子都忘光了吧(語言特性類)。

網上有一大堆得轉換對應表,也有一大堆的轉換實例,但是都沒有強調一個更重要的問題,就是c#數據類型和c++數據類型佔內存長度的對應關係。

    如果dll文件中只包含一些基礎類型,那這個問題可能可以被忽略,但是如果是組合類型(這個叫法也許不妥),如結構體、類類型等,在其中的成員變量的長度的申明正確與否將決定你對dll文件調用的成敗。

如有以下代碼,其實不是dll文件的源碼,而是廠商給的c++例子代碼

  c++中的結構體申明

 

c++中的函數申明(一個c++程序引用另一個c++的dll文件)

 

c++中的調用:

 

 

 

 

 

 

 

 

由上述代碼可見,msg是個結構體的數組。

下面是我的c#的代碼

c#結構體申明:(申明成)

 

 

 

 

 

 

 

 

 

 

c#函數申明

 

C#函數調用

 

 

 

 

 

那些只能用指針不能用結構體和類的地方

 

 

c++中的結構體申明

 

c++中的函數申明(一個c++程序引用另一個c++的dll文件)

 

c#中的結構體申明:

 

c#函數的調用:包含使用指針IntPtr替代結構體數組和讀取IntPtr的方法

 

 

 

 

 

 


 

發佈了8 篇原創文章 · 獲贊 3 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章