0

我已经有 10 多年没有见过 C++ 代码了,现在我需要开发一个非常小的 DLL 来使用Ping该类(System::Net::NetworkInformation)对某些remoteAddress.

我收到的论点remoteAddress是 aFREObject然后需要转换为 a const uint8_t *。前一个是强制性的,我无法更改任何内容。remoteAddress必须作为 a 接收,然后FREObject转换为 a const uint8_t *

我遇到的问题是我必须将 a 传递String^Ping班级而不是 aconst uint8_t *并且我不知道如何将 my 转换const uint8_t *为 a String^。你有什么想法?

接下来是我的代码的一部分:

// argv[ARG_IP_ADDRESS_ARGUMENT holds the remoteAddress value.
uint32_t nativeCharArrayLength = 0;
const uint8_t * nativeCharArray = NULL;
FREResult status = FREGetObjectAsUTF8(argv[ARG_IP_ADDRESS_ARGUMENT], &nativeCharArrayLength, &nativeCharArray);

基本上,该函数用 的值FREGetObjectAsUTF8填充数组并返回数组的长度 in 。此外,该字符串使用 UTF-8 编码以空字符结尾。nativeCharArrayargv[ARG_IP_ADDRESS_ARGUMENT]nativeCharArrayLength

我的下一个问题是将 a 转换String^const uint8_t *. 如果您也能对此提供帮助,我将不胜感激。

正如我之前所说,这些都是不可更改的,我不知道如何更改nativeCharArrayString^. 任何建议都会有所帮助。

PS:此外,此 DLL 的目的是将其用作我的 Adob​​e Air 应用程序的 ANE(Air Native Extension)。

4

1 回答 1

2

您需要 UTF8Encoding 将字节转换为字符。它有接受指针的方法,你会想利用它。你首先需要统计转换后的字符串中的字符个数,然后分配一个数组来存储转换后的字符,然后你就可以把它变成System::String。像这样:

auto converter = gcnew System::Text::UTF8Encoding;
auto chars = converter->GetCharCount((Byte*)nativeCharArray, nativeCharArrayLength-1);
auto buffer = gcnew array<Char>(chars);
pin_ptr<Char> pbuffer = &buffer[0];
converter->GetChars((Byte*)nativeCharArray, nativeCharArrayLength-1, pbuffer, chars);
String^ result = gcnew String(buffer);

请注意,nativeCharArrayLength上的 -1补偿了值中包含的零终止符。

于 2015-05-28T13:50:58.973 回答