C#調(diào)用VC DLL知識點(diǎn)
本人認(rèn)為用C#調(diào)用VC DLL是很有用的知識點(diǎn),我自己感覺很好用啊,不知道別人用我這個方法是否好用。
VC:
比如想要用C#調(diào)用的VC的函數(shù)是:
A( int* b ),
因?yàn)橹羔樤贑#里不容易接,所以這時(shí)候我就會在VC里稍微改變一下,
定義一個結(jié)構(gòu)體:
C{ int num; int* b },
之后把那個調(diào)用的函數(shù)改為:
A( C &c )。
C#:
首先呢,需要引入結(jié)構(gòu)體:
- [StructLayout(LayoutKind.Sequential)]
- public struct C
- {
- public int num;
- public IntPtr b; //注意,這里用的是IntPtr
- }
然后,引入接口函數(shù):
- [DllImport("DLL_NAME.dll")]
- extern static void A(out C c); //這里的out也可以用ref
然后,調(diào)用:
- C c = new C();
- A(out c);
***我們需要把輸出的這個c轉(zhuǎn)化為一個int類型的數(shù)組,這樣才好用:
- int v = c.num
- int[] x=new int[v];
- int size = System.Runtime.InteropServices.Marshal.SizeOf(new int()); //這里是為了算清楚int類型步長
- for (int i = 0; i < v_points_out.points_num; i++)
- {
- int p = (int)System.Runtime.InteropServices.Marshal.PtrToStructure(new IntPtr(c.b.ToInt32() + size * i), typeof(int)); //取出每個值
- x[i] = p;
- }
我寫得是簡單的例子,專門傳整數(shù)類型的指針的,
其實(shí)還可以是復(fù)雜類型的,可是是C#沒有的,可以是自己定義的,等等,
寫出來C#調(diào)用VC DLL這個方法,希望對一些人有幫助。
【編輯推薦】