如何将 UnicodeString 转换为 BSTR
How to convert UnicodeString to BSTR?
我在调用OpenDatabase function(DAO)时遇到问题。它的原型是:
virtual HRESULT STDMETHODCALLTYPE OpenDatabase(BSTR Name/*[in]*/, VARIANT Options/*[in,opt]*/,
VARIANT ReadOnly/*[in,opt]*/,
VARIANT Connect/*[in,opt]*/,
Dao_tlb::Database** ppDb/*[out,retval]*/) = 0; // [-1]
所以,当我这样做时:
if(OpenDialog1->Execute() != true) return;
所选文件名保存在 OpenDialog1->文件名中。然后我调用上面的函数:
pDatabasePtr = pDBEngine->OpenDatabase(WideString(OpenDialog1->FileName).c_bstr(), myOpts, myRead, myCon);
这行得通!但是,问题是当我尝试将文件名设置为其他名称时:
OpenDialog1->FileName = ParamStr(1); // OpenDatabase don't work in runtime - file not recognised!
甚至在函数中设置文件名:
pDatabasePtr = pDBEngine->OpenDatabase(WideString(L"SomeDB.mdb").c_bstr(), myOpts, myRead, myCon);
在这两种情况下,我都会遇到奇怪的错误,并且永远无法打开数据库。所以,我可能错误地将UnicodeString/WideString转换为BSTR。
那么,为什么这个函数(OpenDatabase)适用于
if(OpenDialog1->Execute() != true) return;
并且不适用于
OpenDialog1->FileName = ParamStr(1);
如何正确设置转换?
如果其他人需要它,我在这里找到了答案:https://forums.embarcadero.com/thread.jspa?messageID=498776
相关文章:
- 随机字符,从强制转换 Arduino 字符串到 Excel BSTR 通过 c++ DLL
- 如何将 CComVariant bstr 转换为 CString
- 如何解决此错误(将WCHAR_T转换为BSTR)
- 将 BSTR 转换为 BYTE 数组C++
- 如何在Visual C 中的BSTR和32位Unicode字符串之间进行转换
- 将 BSTR 转换为 CString 时出错
- 如何在Visual Studio C++2010中将BSTR转换为std::string
- 将BSTR HEXA小数线转换为C 中的字节 *
- 为什么BSTR以及如何将其转换为QString
- 如何将 UnicodeString 转换为 BSTR
- 从 BSTR tp std::string 转换大字符串
- 为什么我的 BSTR 到 std::wstring 的转换这么慢?我的测试仪不好吗?
- 当使用W2A将BSTR转换为std::string时,是否需要进行任何清理
- BSTR 到 CString 的阿拉伯语文本转换
- 在 VSS 硬件框架 c++ 中将 BYTE 转换为 BSTR
- 调用CreateProcessW(Mobile MFC)时BSTR到LPCWSTR的转换
- 如何将int转换为BSTR
- 将BSTR转换为LPCWSTR
- OPOS BSTR*转换不正确
- BSTR转换为std::string(std::wstring),反之亦然