0

私は 10 年以上 C++ コードを見たことがありません。現在、Pingクラス(System::Net::NetworkInformation)を使用して ping を実行するための非常に小さな DLL を開発する必要がありますremoteAddress

を受け取っている引数は でremoteAddressあり、FREObjectこれを に変換する必要がありますconst uint8_t *。前者は必須であり、何も変更できません。remoteAddressを として受け取り、FREObject後で に変換する必要がありconst uint8_t *ます。

私が抱えている問題はString^Pingクラスに a ではなく aを渡す必要const uint8_t *があり、 myconst 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関数はnativeCharArray配列に の値をargv[ARG_IP_ADDRESS_ARGUMENT]入力し、配列の長さを に返しますnativeCharArrayLength。また、文字列はヌル文字で終了する UTF-8 エンコーディングを使用します。

私の次の問題は、 を にString^戻すことconst uint8_t *です。これについてもお役に立てれば、本当に助かります。

前に言ったように、これは変更できず、 に変更nativeCharArrayする方法がわかりませんString^。どんなアドバイスも役に立ちます。

PS: また、この DLL の目的は、Adobe 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 に答える