-
C#教程之C#调用EnumDevice获取设备信息
本站最新发布 C#从入门到精通
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
本文接上篇文章 C#获取设备(Audio和Video)名称 简单整理,对第四种方式使用整理.
EnumDevice.dll是网上下载的,也下载了对应的源代码,
对应dll:https://download.csdn.net/download/QQ81867376/12322158
该dll的源码: https://download.csdn.net/download/QQ81867376/12322152
由于项目刚好是x86,所以直接使用上面下载的dll,暂未去编译源代码。
C# 调用EnumDevice.dll的方法时候遇到不少问题,在此记录下。
查看C++函数信息,可以使用工具dllExportViewer
下载地址:http://www.nirsoft.net/utils/dll_export_viewer.html
该dll的原型
__declspec(dllimport)EnumDevice(CAPTURE_DEVICE_TYPE type, char * deviceList[], int nListLen, int & iNumCapDevices);
由于未在前面添加extern "C"
一直找不到该方法,暂时使用了索引来进行。
如果函数过多且经常变化使用索引不恰当 ,但这里只有一个方法,因此无碍,就直接使用索引。
C#方法声明 这里耽误点时间,开始仅仅以为按照类型对上即可,定义了如下方法:
1
2
3
4
5
|
//LPStr、LPWStr、BStr 或 LPTStr [DllImport(EnumDeviceDll, EntryPoint = "#1" , CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public extern static int EnumDevice(CAPTURE_DEVICE_TYPE type, [In, Out, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)] string [] deviceList, int nListLen, ref int iNumCapDevices); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public static List< string > GetDeviceList() { var list = new string [10]; int index = 0; int result = EnumDevice(CAPTURE_DEVICE_TYPE.DSHOW_AUDIO_DEVICE, list, list.Length, ref index); List< string > listAudio = null ; if (result == 0) { listAudio = new List< string >(); foreach ( var item in list) { if ( string .IsNullOrEmpty(item)) { continue ; } listAudio.Add(item); } } return listAudio; } |
栏目列表
最新更新
C# 面向对象
假设客车的座位数是9行4列,使用二维数
C#基于接口设计三层架构Unity篇
C#线程 入门
C#读取静态类常量属性和值
C# 插件式编程
C# 委托与事件有啥区别?
C#队列学习笔记:队列(Queue)和堆栈(Stack
linq 多表分组左连接查询查询统计
C#队列学习笔记:MSMQ入门一
C# 在Word中添加Latex 数学公式和符号
inncheck命令 – 检查语法
基于UDP的服务器端和客户端
再谈UDP和TCP
在socket编程中使用域名
网络数据传输时的大小端问题
socket编程实现文件传输功能
如何优雅地断开TCP连接?
图解TCP四次握手断开连接
详细分析TCP数据的传输过程
SqlServer 利用游标批量更新数据
BOS只读状态修改
SQL Server等待事件—PAGEIOLATCH_EX
数据库多行转换为单一列
获取数据表最后最后访问,修改,更新,
计算经历的时间
SQL查询结果自定义排序
修改数据库默认位置
日期简单加或减
从日期获取年,月或日