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

本文关键字:C++ DLL 返回 LPTSTR 包含 字符 | 更新日期: 2023-09-27 17:55:56

我有一个C# GUI调用非托管C++dll。 回调用于 DLL> GUI 消息传递。

在 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++ DLL 返回 LPTSTR

您可以将其封送为原始字节数组而不是 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);