C#调用Dll传递字符串指针参数的方法是什么
C#调用Dll传递字符串指针参数的方法是什么
本篇内容主要讲解“C#调用Dll传递字符串指针参数的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#调用Dll传递字符串指针参数的方法是什么”吧!
最近用c#写一个小软件,要调用VC写的dll,传递参数给dll,由于是非托管代码,所以调用起来有点麻烦,要把参数转换成非托管代码的指针参数,然后再传递给dllview plaincopy to clipboardprint?
usingSystem.Runtime.InteropServices;//操作Dll的类空间classCGicomIndex{[DllImport("Index_dll.dll")]unsafeprivatestaticexternInt32create_index_file(IntPtrfilename,IntPtrfieldname,UInt32tongshu,IntPtrerr);//VC原型 create_index_file(char*filename,char*fieldname,unsignedlongtongshu,char*err);#region"boolCreateIndexFile(stringm_strFileName,stringm_strFieldName,UInt32m_key,refstringstrErr)对DBF文件按照指定的字段创建索引"///<summary>///对DBF文件按照指定的字段创建索引///</summary>///<paramname="m_strFileName">DBF文件路径</param>///<paramname="m_strFieldName">创建索引的字段名称</param>///<paramname="m_key">索引桶数(文件记录的最大数)</param>///<paramname="strErr">出错信息</param>///<returns>成功true</returns>publicstaticboolCreateIndexFile(stringm_strFileName,stringm_strFieldName,UInt32m_key,refstringstrErr){try{IntPtrptrFileName,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);returnfalse;}Marshal.FreeHGlobal(ptrFileName);Marshal.FreeHGlobal(ptrFieldName);Marshal.FreeHGlobal(ptrErr);returntrue;}catch(System.Exceptionex){strErr=ex.Message;returnfalse;}}#endregion#region"IntPtrmallocIntptr(stringstrData)根据数据的长度申请非托管空间"///<summary>///根据数据的长度申请非托管空间///</summary>///<paramname="strData">要申请非托管空间的数据</param>///<returns>指向非拖管空间的指针</returns>privatestaticIntPtrmallocIntptr(stringstrData){//先将字符串转化成字节方式Byte[]btData=System.Text.Encoding.Default.GetBytes(strData);//申请非拖管空间IntPtrm_ptr=Marshal.AllocHGlobal(btData.Length);//给非拖管空间清0Byte[]btZero=newByte[btData.Length+1];//一定要加1,否则后面是乱码,原因未找到Marshal.Copy(btZero,0,m_ptr,btZero.Length);//给指针指向的空间赋值Marshal.Copy(btData,0,m_ptr,btData.Length);returnm_ptr;}///<summary>///根据长度申请非托管空间///</summary>///<paramname="strData">要申请非托管空间的大小</param>///<returns>指向非拖管空间的指针</returns>privatestaticIntPtrmallocIntptr(intlength){//申请非拖管空间IntPtrm_ptr=Marshal.AllocHGlobal(length);//给非拖管空间清0Byte[]btZero=newByte[length+1];//一定要加1,否则后面是乱码,原因未找到Marshal.Copy(btZero,0,m_ptr,btZero.Length);//给指针指向的空间赋值Marshal.Copy(btZero,0,m_ptr,length);returnm_ptr;}#endregion}
到此,相信大家对“C#调用Dll传递字符串指针参数的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
推荐阅读
-
polyfills怎么按需加载
polyfills怎么按需加载本篇内容主要讲解“polyfills...
-
C#数据类型怎么实现背包、队列和栈
-
C#怎么实现冒泡排序和插入排序算法
C#怎么实现冒泡排序和插入排序算法这篇文章主要讲解了“C#怎么实现...
-
C#如何实现希尔排序
-
C#如何实现归并排序
-
C#怎么使用符号表实现查找算法
-
C#类的静态成员怎么用
C#类的静态成员怎么用这篇“C#类的静态成员怎么用”文章的知识点大...
-
C#的静态函数怎么用
C#的静态函数怎么用这篇文章主要讲解了“C#的静态函数怎么用”,文...
-
C#中的析构函数怎么用
C#中的析构函数怎么用这篇文章主要讲解了“C#中的析构函数怎么用”...
-
怎么用CZGL.ProcessMetrics监控.NET应用