如何将 UnicodeString 转换为 BSTR

How to convert UnicodeString to BSTR?

本文关键字:BSTR 转换 UnicodeString      更新时间:2023-10-16

我在调用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