怎样向ATL Simple Object的接口Method传递不定长字符串参数?... BSTR应该是没有问题的,因为VB中的字符串就是BSTR类型的,是不是你没有正确使用BSTR的内存分配函数吧! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BSTR是不定长的长串,获得BSTR字串值后应用CComBSTR 不会吧,还要用COM!我只是想从VB中传递一个不定长字符串到一个ATL接口中,而在接口实现中,此字符串应转换为LPCTSTR,被MFC使用。整个过程怎样实现最简便?BSTR的内存分配函数是什么?MSDN中查不到。 CComBSTR& operator =( LPCSTR pSrc );可以直接把CComBSTR赋给LPCTSTR比如:BSTR para;CComBSTR combstr(para);LPCTSTR=(LPCTSTR)combstr; 我的源代码结构如下:VC:HRESULT Open([in] BSTR FileName, [out] long Result){...CFile f;f.Open((LPCTSTR) FileName, ...)...}VB:dim test as new vcATLobjectvcATLobject.Open "test.tre"我不想使用CComBSTR,有没有类似我这样的解决方法(只要简单的转换即可)? HRESULT Open([in] BSTR FileName, [out] long Result){...CComBSTR combstr(FileName);CString strFileName = combstr;CFile f;f.Open((LPCTSTR) strFileName, ...)...} 你也用了CComBSTR,没有不用的办法吗?不必为一个字符串而初始化一个COM吧? HRESULT Open([in] BSTR FileName, [out] long Result){..._bstr_t combstr(FileName);CFile f;f.Open((char *)combstr, ...)...} 跟踪了3个小时,终于弄明白了。earthdog的说法不确切。hover也不太对,没必要用CComBSTR,只是一个小小的参数,用多了会降低效率。opentuxedo的代码是错的。loyee的两段代码没问题,但用_bstr_t需要添加对comdef.h的引用,增大体积,降低效率。而使用CComBSTR与CString共同传递参数是没必要的。据我的跟踪,loyee的代码,就是转了一个圈:初始化CComBSTR实例时,BSTR作为LPCOLESTR传入其内部变量m_str(BSTR 类型);初始化CString实例时,调用了CComBSTR的一个运算符:BSTR,其作用就是直接返回m_str!也就是说:这里,直接用CString接受参数然后返回LPCTSTR即可。 CDateTimeCtrl [求助]C#写的COM接口如果要返回结构体,应该怎么做? 老话题,多线程调用同一函数 给个 飘云阁 的邀请码呀。 寻找XP中播放声音的API 一个关于class view现实的问题? 在对话框中添加菜单中的退出按钮,如何编程?? 恩,关于快捷方式的设想。 Bresenham算法编程为什么没有生成直线? 100分求教,请问有关com+或者DCOM的问题 各位,问个自己下载的问题。 一个简单的问题,向高手们请教!!!(我知道怎么给分的)
整个过程怎样实现最简便?
BSTR的内存分配函数是什么?MSDN中查不到。
比如:
BSTR para;
CComBSTR combstr(para);
LPCTSTR=(LPCTSTR)combstr;
VC:
HRESULT Open([in] BSTR FileName, [out] long Result)
{...
CFile f;
f.Open((LPCTSTR) FileName, ...)
...}VB:
dim test as new vcATLobject
vcATLobject.Open "test.tre"我不想使用CComBSTR,有没有类似我这样的解决方法(只要简单的转换即可)?
{...CComBSTR combstr(FileName);
CString strFileName = combstr;CFile f;
f.Open((LPCTSTR) strFileName, ...)
...}
{..._bstr_t combstr(FileName);CFile f;
f.Open((char *)combstr, ...)
...}
earthdog的说法不确切。
hover也不太对,没必要用CComBSTR,只是一个小小的参数,用多了会降低效率。
opentuxedo的代码是错的。
loyee的两段代码没问题,但用_bstr_t需要添加对comdef.h的引用,增大体积,降低效率。而使用CComBSTR与CString共同传递参数是没必要的。据我的跟踪,loyee的代码,就是转了一个圈:
初始化CComBSTR实例时,BSTR作为LPCOLESTR传入其内部变量m_str(BSTR 类型);
初始化CString实例时,调用了CComBSTR的一个运算符:BSTR,其作用就是直接返回m_str!
也就是说:这里,直接用CString接受参数然后返回LPCTSTR即可。