当前位置: 首页 > 编程语言 > C#

C#DllImport和Marshalingchar--分享

时间:2023-04-10 21:15:11 C#

C#DllImport和Marshalingchar**我在c#工作,我需要在c++dll中使用这个函数:extern"C"charIMPEXP__stdcallservice_GetParameter(constchar*参数,constintvalue_lenght,char**值);我在C++代码中使用它如下:char*val=newchar[256];service_GetParameter("firmware_version",255,&val);AnsiString固件版本=val;删除[]值;如何导入此函数并在C#中使用它?提前致谢如果此函数分配内存并让调用者负责释放它,恐怕您将不得不手动管理它:将参数声明为refIntPtr并使用Marshal类的方法来获取带有副本的字符串的目标数据。然后调用相应的函数来释放内存(正如德克所说,如果没有关于函数的更多信息,我们不能说太多)。如果真的要在调用前分配,应该是这样的:;publicstaticstringServiceGetParameter(stringparameter,intmaxLength){stringret=null;IntPtrbuf=Marshal.AllocCoTaskMem(maxLength+1);尝试{Marshal.WriteByte(buf,maxLength,0);//确保调用后会有空字节IntPtrbuf2=buf;service_GetParameter(参数,maxLength,refbuf2);System.Diagnostics.Debug.Assert(buf==buf2,"C++函数修改了指针,它不应该那样做!");ret=Marshal.PtrToStringAnsi(buf);}最后{Marshal.FreeCoTaskMem(buf);返回ret;}我会这样开始:以上就是C#学习教程:C#DllImportandMarshalingchar**分享的内容,如果对你有用,需要了解更多C#学习教程,希望大家多多付出注意—[DllImport("yourfile.dll",CharSet=CharSet.Ansi]publicstaticexternInt32service_GetParameter([MarshalAs(UnmanagedType.LPStr)]StringszParameter,Int32value_length,[Out]StringBuildersbValue);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: