aki*_*kif 9 c# parameters pinvoke stringbuilder out
在C#PInvoke中,如何传递字符串缓冲区以便C DLL填充它并返回?PInvoke宣言是什么?
C函数声明是
int GetData(char* data, int buflength);
Run Code Online (Sandbox Code Playgroud)
在C#中,我已将其声明为
[DllImport(DllName)]
static extern Int32 GetData([MarshalAs(UnmanagedType.LPStr)]StringBuilder receiveddata, Int32 buflen);
Run Code Online (Sandbox Code Playgroud)
这是对的吗?我像这样传递StringBuilder变量
int bufferLength = 32;
StringBuilder data = new StringBuilder(bufferLength);
int result = GetData(data, bufferLength);
Run Code Online (Sandbox Code Playgroud)
我想知道它是否正确?
谢谢
我相信这是正确的.
[DllImport(DllName)]
static extern int GetData(StringBuilder data, int length);
Run Code Online (Sandbox Code Playgroud)
这被称为:
StringBuilder data = new StringBuilder(32);
GetData(data, data.Capacity);
Run Code Online (Sandbox Code Playgroud)
我曾经希望对我的函数返回的字节有更多的控制权,并且这样做:
[DllImport(DllName)]
private unsafe static bool GetData(byte* data, int length);
Run Code Online (Sandbox Code Playgroud)
像这样使用:
byte[] bytes = new byte[length];
fixed(byte* ptr = bytes)
{
bool success = Library.GetData(ptr, length);
if (!success)
Library.GetError();
return Encoding.UTF8.GetString(bytes);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7286 次 |
| 最近记录: |