C#调用VC DLL知识点

    技术2024-12-19  51

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

    VC:

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

    A( int* b ),

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

    定义一个结构体:

    C{ int num; int* b },

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

    A( C &c )。

    C#:

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

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

    然后,引入接口函数:

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

    然后,调用:

    C c = new C();  A(out c);  

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

    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;  }  

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

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

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

    最新回复(0)