从包含“\ 0”字符的非托管C ++ DLL返回LPTSTR

问题描述 投票:1回答:1

我有一个C#gui调用一个非托管的C ++ DLL。回调用于dll - > gui messaging。

在dll中创建一个可能包含'\ 0'字符的LPTSTR。该字符串需要通过回调参数传递回gui,完整地通过回调。

不幸的是我只能将字符串传递给gui直到空字符。似乎编组切断了弦乐。

// C# callback declarations
public delegate bool callbackDelegate(int iEvent, [MarshalAs(UnmanagedType.LPWStr)] string SomeString);
private callbackDelegate callbackDelegateInstance;

// instantiating and calling the callback in C#
callbackDelegateInstance = new callbackDelegate(CallbackHandler);
DLLCallbackFunction(callbackDelegateInstance);

// C# callback handler
private bool CallbackHandler(int iEvent, [MarshalAs(UnmanagedType.LPWStr)] string SomeString)
{
    // SomeString only contains characters up until the null char
}

有没有办法返回整个字符串,包括来自dll的空字符?

我有权访问dll和gui代码。

c# c++ pinvoke marshalling
1个回答
0
投票

您可以将其编组为原始字节数组而不是LPTSTR。如果数据不是常量,则必须添加其他长度参数。

委托将被声明如下:

 public delegate bool callbackDelegate(int iEvent, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] data, int dataCount);

在非管理方面:

typedef void (__stdcall *callbackDelegate)(int iEvent, const char* data, int size);
© www.soinside.com 2019 - 2024. All rights reserved.