将C char [] []数组元素编组为C#
发布时间:2020-12-16 05:05:05 所属栏目:百科 来源:网络整理
导读:我看了看,尝试了一切我能想到或已经找到的建议.我仍然没有运气获得我需要的数据. 我正在使用第三方DLL,我认为它是用C语言编写的.我需要在C#中访问此DLL中的函数.在大多数情况下,我有这个工作,除了一个功能.我遇到问题的函数有以下标题: uint queryNumOfServ
我看了看,尝试了一切我能想到或已经找到的建议.我仍然没有运气获得我需要的数据.
我正在使用第三方DLL,我认为它是用C语言编写的.我需要在C#中访问此DLL中的函数.在大多数情况下,我有这个工作,除了一个功能.我遇到问题的函数有以下标题: uint queryNumOfServers(USHORT *NumOfServers,char ServerNames[8][16]); 我在C#应用程序中声明了以下内容 [DllImport("client.dll",CharSet=CharSet.Ansi] public static extern uint queryNumOfServers(ref short numberofServer,StringBuilder serverNames); 我这称之为: StringBuilder serverNames = new StringBuilder(128); short numServers = -1; queryNumberOfServers(ref numServers,serverNames); 问题是,虽然numberOfServers返回等于4,但我只在serverNames中获得一个名称.我在一个小C程序中测试了上面的C函数.我得到了numberOfServer = 4,但我还得到了4个名字. 我试过以下但没有成功: [DllImport("client.dll",CharSet=charSet.Ansi,CallingConvention = CallingConvention.StdCall)] public static extern uint queryNumOfServers(ref short numberOfServer,[MarshalAs(UnmanagedType.LPStr)] string serverNames); 称之为 string serverNames = new string(' ',128); queryNumOfServers(ref numServers,serverNames); 使用此选项对serverNames没有任何更改. 开发环境是Visual Studio 2008. 解决方法
经过多次搜索和拔毛,这是对我有用的解决方案.
在我的C#应用??程序中声明了函数头: [DllImport("client.dll",CharSet = CharSet.Ansi)] public static extern uint queryNumOfServers(ref short numberOfServers,[MarshalAs(UnmanagedType.LPArray)] byte[,] serverNames); 然后调用如下: byte[,] serverNames = new byte[8,16]; short numServers = -1; queryNumberOfServers(ref numServers,serverNames); 这将返回一个双索引字节数组.从这里我使用Buffer.BlockCopy()和Encoding.UTF8.GetString()将我的字节数组转换为字符串数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – wicked_pdf在unicode pdf转换(ruby)上显示
- cocos2dx 实现gallery (五)
- c# – MaasOne yahoo-finance-managed为AlphabeticIDIndexR
- vue教程3-07 vue-loader
- Swift的enum枚举类型介绍
- 无法使用swift 3和ios 10从facebook检索电子邮件
- vb.net之SqlHelper的编写与应用
- objective-c – 尝试在表格边界之外创建UITableView的table
- 关于flex 和java上传是用FileReference 时候遇到的问题
- PostgreSQL连接池pgbouncer程序连接报错解决一例