0

私は自分の質問に対する答えを広く探しましたが、すべての解決策は受け入れられない、適用できない、および/または混乱を招きます。

で実装された関数から文字列C++を の呼び出し元のコードに返す必要がありますC#

一部の関数では複数の文字列を渡す/返す必要があるため、返される文字列は戻り値ではなくパラメーターとして返す必要があります。文字列の長さはさまざまなので、バッファなどを割り当てることはできません。

どんな助けでも大歓迎です。

注: Justin および/または他のユーザーによって投稿および言及されたソリューションは、私のユース ケースのソリューションではありません。質問で述べたように、C++ コードを呼び出す前の文字列のサイズはわかりません。StringBuffer を事前に割り当てて C++ コードに渡すことはできません。

4

3 に答える 3

0

異なる言語で実装されたコンポーネント間で文字列を渡すという明確な目的のために、プラットフォームによって提供される移植可能な (マルチコンパイラ、マルチ言語) 文字列を使用しますBSTR

C++ では、SysAllocStringまたはを使用しますSysAllocStringLenSysFreeStringP/invokeは、適切な署名を使用している限り、これらを処理する方法 (.NET 文字列に変換して を呼び出す) を既に認識しています。

extern static void DoSomething([MarshalAs(UnmanagedType.BStr)] out String returnedString);

そして、単にそれを呼び出します:

string theString;
DoSomething(out theString);

p/invoke が処理するので、特別な変換やクリーンアップは必要ありません。

詳細については、p/invoke での文字列処理に関するこの MSDN ページを参照してください。

注: リンク内の例はどれもまさにこのケースではないと思うので、C++ プロトタイプを次に示します。

void DoSomething(__out BSTR *s);
于 2013-08-19T14:27:32.743 に答える