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

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

本篇内容主要讲解“C#调用Dll传递字符串指针参数的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#调用Dll传递字符串指针参数的方法是什么”吧!

最近用c#写一个小软件,要调用VC写的dll,传递参数给dll,由于是非托管代码,所以调用起来有点麻烦,要把参数转换成非托管代码的指针参数,然后再传递给dllview plaincopy to clipboardprint?

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

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传递字符串指针参数的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

发布于 2022-01-14 22:34:47
收藏
分享
海报
0 条评论
34
上一篇:jquery如何添加丢失焦点事件 下一篇:OpenCV如何利用手势识别实现虚拟拖放效果
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码