C#调用Dll传递字符串指针参数的方法是什么
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"C#调用Dll传递字符串指针参数的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#调用Dll传递字符串指针参数的方法是什么"
千家信息网最后更新 2026年10月31日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安全错误
数据库的锁怎样保障安全
科技互联网
保险科技 互联网保险
互联网是第几次科技革命的成果
苏州找大状互联网科技有限公司
互联网公司 科技公司
极限挑战互联网科技
百单互联网科技有限公司
互联网科技公司有哪些
海南科技产业互联网平台
华中科技有哪些互联网大佬
汽车互联网创新科技园
互联网还是高科技吗
中国航天科技大学国际工业互联网
互联网科技扶贫时间
长沙互联网科技
众安科技工业互联网合作
美国互联网科技公司
宇信科技在杭州互联网排第几
互联网科技包装股份有限公司上市
容联科技互联网电商
互联网科技企业
互联网科技金融
电子科技大学互联网
长亮科技互联网金融
互联网科技与管理
荆州市昕露互联网络科技有限公司
卓翼科技产业互联网合作
互联网相关科技技术
广州梦谷互联网科技有限公司领导
互联网公司属于科技吗