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的方法