C#PInvokeoutStringDeclaration在C#PInvoke中,如何传递一个字符串缓冲区让CDLL填充并返回?什么是PInvoke声明?C函数声明为intGetData(char*data,intbuflength);在C#中,我将其声明为[DllImport(DllName)]staticexternInt32GetData([MarshalAs(UnmanagedType.LPStr)]StringBuilderreceiveddata,Int32buflen);这样对吗?我像这样传递StringBuilder变量intbufferLength=32;StringBuilder数据=newStringBuilder(bufferLength);intresult=GetData(数据,bufferLength);我想知道它是否正确?谢谢我相信这是正确的。[DllImport(DllName)]staticexternintGetData(StringBuilderdata,intlength);这叫做:StringBuilderdata=newStringBuilder(32);GetData(数据,数据。容量);我希望更好地控制我的函数返回字节并这样做:[DllImport(DllName)]privateunsafestaticboolGetData(byte*data,intlength);像这样使用它:byte[]bytes=newbyte[length];fixed(byte*ptr=bytes){boolsuccess=Library.GetData(ptr,length);如果(!成功)Library.GetError();返回Encoding.UTF8.GetString(字节);我不认为在这里使用MarshalAs属性是必要的。StringBuilder是char*out的正确选择。我想添加一个CharSet属性会很好,因为您在这里处理字符串。长这样:以上就是C#学习教程:C#PInvokeoutstringdeclaration分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——【DllImport(DllName,CharSet=CharSet.Auto)】本文收集自网络,不代表立场.如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
