千家信息网

C#调用Dll传递字符串指针参数的方法是什么

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"C#调用Dll传递字符串指针参数的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#调用Dll传递字符串指针参数的方法是什么"
千家信息网最后更新 2025年11月07日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安全错误 数据库的锁怎样保障安全 关于网络安全画饭圈乱象手抄报 衢州海量软件开发性价比 常见的网络安全问题有网络设备 存在网络安全隐患整改措施 应用软件开发学校 软件开发合同模板怎么做 泉州猎鹰软件开发有限公司 什么用于数据库安全管理 服务器机柜智能锁 机房服务器连接路由器还是交换机 汽车软件开发出售 嘉定区网络软件开发价格表格 苹果的邮箱发件服务器 国家网络安全专业研究生就业 数据库做仓库管理软件 浙江专业软件开发哪家便宜 黄山电力软件开发公司哪家好 数据库服务器和基站区别 禅城定制软件开发 rac数据库如何使用 sql筛选前100条数据库 学校开展网络安全知识讲座 广东信息软件开发费用是多少 国家网络安全宣传周主题分别为 泉州猎鹰软件开发有限公司 国家三级计算机网络技术视频 大一数据库大作业 大华卡口管理服务器 数据库怎么做并发 河北oa软件开发平台
0