gpt4 book ai didi

c# - 从包含 '\0' 个字符的非托管 C++ DLL 返回 LPTSTR

转载 作者:太空宇宙 更新时间:2023-11-04 14:10:47 24 4
gpt4 key购买 nike

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

在 dll 中创建了一个 LPTSTR,其中可能包含“\0”字符。该字符串需要通过回调参数完整地传回给 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 代码。

最佳答案

您可以将其编码为原始字节数组而不是 LPTSTR。如果您的数据不是恒定大小,则必须添加一个额外的长度参数。

委托(delegate)将被声明如下:

 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);

关于c# - 从包含 '\0' 个字符的非托管 C++ DLL 返回 LPTSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14489640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com