com interop に取り組んでいる間、このリンクのチュートリアルに従いました。要件に応じていくつかの変更を行ったため、コードは正常に動作しますが、文字列の処理中に問題が発生します。ここでは境界として BSTR 文字列を使用しています。ここに私がC++から呼び出しているC#の関数があります
public string ShowDialog([MarshalAs(UnmanagedType.BStr)] string stringToPrint)
{
// Console.WriteLine(" Enter TOTP input:");
// stringToPrint = Console.ReadLine();
if (stringToPrint == "111111")
{
MessageBox.Show("true");
}
else
{
MessageBox.Show("false");
}
return stringToPrint;
}
ここに、呼び出しが行われているコードの C++ メイン関数セクションがあります
CoInitialize(NULL);
MyInterop::IMyDotNetInterfacePtr pDotNetCOMPtr;
HRESULT hRes = pDotNetCOMPtr.CreateInstance(MyInterop::CLSID_MyDotNetClass);
if (hRes == S_OK)
{
BSTR lResult ;
cout << "enter TOTP input" << endl;
_bstr_t bstrStatus = SysAllocString(L"111111");
pDotNetCOMPtr->ShowDialog(bstrStatus,&lResult);
SysFreeString(bstrStatus);
}
CoUninitialize();
system("pause");
私が直面している問題は次のとおりです。
- C# で戻り関数を使用しているにもかかわらず、C++ コードから渡された後、BSTR 文字列がコンソールに返されない
- ここでSysAllocString("")を使用しているため、コンソールに動的に入力を挿入することは可能ですか?