C#调用Dll传递字符串指针参数的方法是什么
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,本篇内容主要讲解"C#调用Dll传递字符串指针参数的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C#调用Dll传递字符串指针参数的方法是什么"
千家信息网最后更新 2025年02月04日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安全错误
数据库的锁怎样保障安全
软件开发工资5000难不难
电脑服务器和计算机的区别
曲靖网络安全大队长
软件开发适合哪种配置电脑
数据库英占多少个
三级网络技术考试模拟
淄博沂源网络安全
大型软件开发困难及原因
sql2008 数据库对比
一般服务器升级或者维护要多少天
信宜软件开发
服务器返回未知的错误
中国香港超频服务器厂家现货
创建数据库的图片
武汉市计算机软件开发有限公司
企业网络安全的规划与设计
服务器画面颜色不对
数据库负数显示null
网络安全示范宣传
6月1号网络安全法
知网数据库采购价
手机软件开发商能找到流量吗
软件开发第一步是什么
mysql数据库备份文件
网络安全宣传周心得体会800字
黑科技互联网商业小说
软件开发去外企好吗
100个模组的服务器
论文从数据库撤下还影响吗
数据库技术支持和维护