在处理 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("")这使得它有点硬编码。