C#调用VC DLL知识点

开发 后端
本文介绍了用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这个方法,希望对一些人有帮助。

【编辑推荐】

  1. C#自定义事件步步 通
  2. 如何在C#中使用存储过程(SQL Server 2000)
  3. 存储过程自动转成C#源码过程
  4. C#事件处理和自定义事件
  5. 通过C#反射特性查看自定义特性
责任编辑:book05 来源: hi.baidu
相关推荐

2009-08-05 16:41:36

C#调用VC dll

2009-08-05 16:49:42

C#中调用dll

2009-08-06 17:42:32

C#知识点

2009-08-05 09:09:14

C#调用VC DLL接

2009-08-07 17:22:36

C#调用dll导出函数

2009-08-03 12:57:27

C#调用DLL

2009-07-31 17:28:35

C#语言调用DLL

2009-08-05 09:30:39

C#调用DLL函数

2009-09-02 17:16:01

冒泡排序

2009-08-05 09:40:02

C#调用DLL函数

2011-04-08 09:52:44

C++C#DLL

2010-06-04 16:26:02

2009-08-05 17:06:39

ASP调用C# DLL

2024-03-01 20:59:11

C#DLL开发

2010-08-17 14:56:00

HCNE认证

2011-04-15 12:25:21

BGP路由

2016-05-30 17:31:34

Spring框架

2009-07-31 14:54:48

dll函数C#导出

2024-06-28 09:37:14

技巧.NET开发

2011-03-31 09:13:00

Visual Stud
点赞
收藏

51CTO技术栈公众号