P / Invokeを使用して、アンマネージDLLから(とりわけ)文字列をフェッチしようとしていますが、何を試しても文字列が文字化けします。
私はネイティブのWindowsコーダーではないので、文字エンコードビットについてはよくわかりません。DLLは「マルチバイト文字セット」を使用するように設定されていますが、これは変更できません(他のプロジェクトが破損するため)。ラッパー関数を追加して、既存のクラスからデータを抽出しようとしています。問題の文字列は現在CStringとして存在し、マネージドStringBuilderに取得することを期待して、LPTSTRにコピーしようとしています。
これは私が正しいと信じていることです(私は明らかに無関係なビットを削除しました):
// unmanaged function
DLLEXPORT void Test(LPTSTR result)
{
// eval->result is a CString
_tcscpy(result, (LPCTSTR)eval->result);
}
// in managed code
[DllImport("Test.dll", CharSet = CharSet.Auto)]
static extern void Test([Out] StringBuilder result);
// using it in managed code
StringBuilder result = new StringBuilder();
Test(result);
// contents in result garbled at this point
// just for comparison, this unmanaged consumer of the same function works
LPTSTR result = new TCHAR[100];
Test(result);
ヒントを本当に感謝します!ありがとう!!!