如何将UnicodeString转换为BSTR?

时间:2013-12-28 21:35:11

标签: c++ string c++builder bstr

调用OpenDatabase函数(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-> FileName 中。然后我调用上面的函数:

    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); 

如何正确设置转换?

1 个答案:

答案 0 :(得分:0)

如果有其他人需要,我在这里找到答案: https://forums.embarcadero.com/thread.jspa?messageID=498776