C#调用VC DLL知识点

本人认为用C#调用VC DLL是很有用的知识点,我自己感觉很好用啊,不知道别人用我这个方法是否好用。

VC:

比如想要用C#调用的VC的函数是:

A( int* b ),

因为指针在C#里不容易接,所以这时候我就会在VC里稍微改变一下,

定义一个结构体:

C{ int num; int* b },

之后把那个调用的函数改为:

A( C &c )。

C#:

首先呢,需要引入结构体:

 
  
  1. [StructLayout(LayoutKind.Sequential)]  
  2. public struct C  
  3. {  
  4. public int num;  
  5. public IntPtr b; //注意,这里用的是IntPtr  
  6. }  

然后,引入接口函数:

 
  
  1. [DllImport("DLL_NAME.dll")]  
  2. extern static void A(out C c); //这里的out也可以用ref  

然后,调用:

 
  
  1. C c = new C();  
  2. A(out c);  

最后我们需要把输出的这个c转化为一个int类型的数组,这样才好用:

 
  
  1. int v = c.num  
  2. int[] x=new int[v];  
  3. int size = System.Runtime.InteropServices.Marshal.SizeOf(new int()); //这里是为了算清楚int类型步长  
  4. for (int i = 0; i <  v_points_out.points_num; i++)  
  5. {  
  6. int p = (int)System.Runtime.InteropServices.Marshal.PtrToStructure(new IntPtr(c.b.ToInt32() + size * i), typeof(int)); //取出每个值  
  7. x[i] = p;  
  8. }  

我写得是简单的例子,专门传整数类型的指针的,

其实还可以是复杂类型的,可是是C#没有的,可以是自己定义的,等等,

写出来C#调用VC DLL这个方法,希望对一些人有帮助。

你可能感兴趣的:(C#调用VC DLL知识点)