3

ここで何が欠けていますか?^はスマートポインタであり、refによって文字列を関数に渡すことができると思いました。他の帽子オブジェクトはどうですか?

// calling code
MyClass::GetString(_str1, _str2);
// both strings are nullptr at this point

/* static */ 
MyClass::GetStrings(String^ str1, String^ str2)
{
    // Read from Local Settings
    auto value = localSettings->Values->Lookup(kKey);
    String^ temp = ref new String(value->ToString()->Data());
    str1 = temp;

    // same for str2
}
4

2 に答える 2

10

AT^はポインタ型に似ています。T^パラメータを持つ関数(静的メンバー関数など)がある場合、ポインタが値で渡されるのと同じようにGetStrings、ハットは値で渡されます

'を参照で渡す場合はString^、参照を使用する必要があります。

void MyClass::GetStrings(String^& str1, String^& str2)

参照はC++言語の機能であり、Windowsランタイム型システムの一部ではないことに注意してください。Windowsランタイム型システムは、参照パラメーターによる入出力もサポートしていません。outパラメータのみがサポートされています。

したがって、MyClassがパブリックWindowsランタイム参照型でGetStringsあり、パブリックまたは保護されたメンバー関数である場合(基本的に、MyClass::GetStringsメタデータに表示され、WindowsランタイムABI全体で呼び出し可能である場合)、ポインターを使用する必要があります。

void MyClass::GetStrings(String^* str1, String^* str2)

これらのポインターは出力パラメーターです。指定されたString^sに書き込むことはできますが、それらから読み取ることはできません。

于 2012-09-24T21:39:04.840 に答える
1

関数シグニチャのパラメータタイプとして^&を使用する必要があったことがわかりました。^%はCLIの一部ですが、CXを使用しています。^%を使用すると、コンパイラはそれについて文句を言い、%を&に​​置き換えて先に進みます。それらを手動で変更し、うまく機能しました。

于 2012-09-24T23:23:42.797 に答える