C#调用Dll传递字符串指针参数的方法是什么
发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,本篇内容主要讲解"C#调用Dll传递字符串指针参数的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#调用Dll传递字符串指针参数的方法是什么"
千家信息网最后更新 2025年02月16日C#调用Dll传递字符串指针参数的方法是什么
本篇内容主要讲解"C#调用Dll传递字符串指针参数的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#调用Dll传递字符串指针参数的方法是什么"吧!
最近用c#写一个小软件,要调用VC写的dll,传递参数给dll,由于是非托管代码,所以调用起来有点麻烦,要把参数转换成非托管代码的指针参数,然后再传递给dllview plaincopy to clipboardprint?
using System.Runtime.InteropServices; //操作Dll的类空间 class CGicomIndex { [DllImport("Index_dll.dll")] unsafe private static extern Int32 create_index_file(IntPtr filename, IntPtr fieldname, UInt32 tongshu, IntPtr err); //VC原型 create_index_file( char*filename, char * fieldname, unsigned long tongshu, char *err); #region " bool CreateIndexFile( string m_strFileName, string m_strFieldName, UInt32 m_key, ref string strErr ) 对DBF文件按照指定的字段创建索引" ////// 对DBF文件按照指定的字段创建索引 /// /// DBF文件路径 /// 创建索引的字段名称 /// 索引桶数(文件记录的最大数) /// 出错信息 ///成功 true public static bool CreateIndexFile( string m_strFileName, string m_strFieldName, UInt32 m_key, ref string strErr ) { try { IntPtr ptrFileName, ptrFieldName, ptrErr; //根据数据的长度申请非托管空间 ptrFileName = mallocIntptr(m_strFileName); ptrFieldName = mallocIntptr(m_strFieldName); ptrErr = mallocIntptr(300); //创建索引 if (create_index_file(ptrFileName, ptrFieldName, m_key, ptrErr) != 1) { strErr = Marshal.PtrToStringAnsi(ptrErr); Marshal.FreeHGlobal(ptrFileName); Marshal.FreeHGlobal(ptrFieldName); Marshal.FreeHGlobal(ptrErr); return false; } Marshal.FreeHGlobal(ptrFileName); Marshal.FreeHGlobal(ptrFieldName); Marshal.FreeHGlobal(ptrErr); return true; } catch (System.Exception ex) { strErr = ex.Message; return false; } } #endregion #region " IntPtr mallocIntptr( string strData ) 根据数据的长度申请非托管空间" ////// 根据数据的长度申请非托管空间 /// /// 要申请非托管空间的数据 ///指向非拖管空间的指针 private static IntPtr mallocIntptr( string strData ) { //先将字符串转化成字节方式 Byte[] btData = System.Text.Encoding.Default.GetBytes(strData); //申请非拖管空间 IntPtr m_ptr = Marshal.AllocHGlobal(btData.Length); //给非拖管空间清0 Byte[] btZero = new Byte[btData .Length+ 1]; //一定要加1,否则后面是乱码,原因未找到 Marshal.Copy(btZero, 0, m_ptr, btZero.Length); //给指针指向的空间赋值 Marshal.Copy(btData, 0, m_ptr, btData.Length); return m_ptr; } ////// 根据长度申请非托管空间 /// /// 要申请非托管空间的大小 ///指向非拖管空间的指针 private static IntPtr mallocIntptr( int length ) { //申请非拖管空间 IntPtr m_ptr = Marshal.AllocHGlobal(length); //给非拖管空间清0 Byte[] btZero = new Byte[length + 1]; //一定要加1,否则后面是乱码,原因未找到 Marshal.Copy(btZero, 0, m_ptr, btZero.Length); //给指针指向的空间赋值 Marshal.Copy(btZero, 0, m_ptr, length); return m_ptr; } #endregion }
到此,相信大家对"C#调用Dll传递字符串指针参数的方法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
空间
指针
托管
参数
索引
字符
字符串
方法
指向
数据
文件
长度
C#
字段
乱码
代码
内容
原因
学习
实用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库表添加字段名
使命召唤16俄区无法连接服务器
网络安全平台排行榜
如何判断数据库加密的方式
湖南服务器电源生产厂
信创 数据库 入围
网络安全座谈会记录
登陆linux数据库指令未找到
数据库查询平均成绩前两名
高凝聚底耦合软件开发
网络安全好读书手抄报图片
网络安全隔离业绩
衢州定制app软件开发
哈工程网络安全大概多少分数
网络安全和信息化制度范文
商丘盛华网络技术有限公司
数据库前置库
三级计算机网络技术基础知识
河南服务器电源哪里买
杭州奶酪网络技术有限公司
企友安装时提前没有服务器
网络安全各个等级分化判断
巴南计算机网络技术
网络安全公司申报项目
广东嵌入式软件开发公司
重要网络安全防护期
还原数据库显示错误
软件开发也是我们团队的优势
网络安全手抄报用多大纸
计算机网络技术论述题