vc atl dll怎么向vb程序返回字符串结果

vc atl dll如何向vb程序返回字符串结果?
我写一个vc   atl   dll,里面有一个函数
STDMETHODIMP   CATLDll::BSTRRefTest(BSTR   *tempStr)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
//   TODO:   Add   your   implementation   code   here

CString   s   =   *tempStr;
s   =   s   +   s;
BSTR   tbstr   =   s.AllocSysString();
tempStr   =   &tbstr;
return   S_OK;
}

编译注册ATLDll后在vb中调用
        Dim   VcDll   As   ATLDllLib.XXXX
        Set   VcDll   =   New   XXXX
       
        Dim   s   As   String
        s   =   "abcd "
        VcDll.BSTRRefTest   s '这里系统报错
        MsgBox   "s   = "   &   s
结果运行到“VcDll.BSTRRefTest   s”一句vb报错“Compile   error:Wrong   number   of   arguments   or   invalid   property   assignment”
什么原因,如何实现vb向atl   dll输入并返回字符串呢?谢谢!

------解决方案--------------------
CString s = *tempStr;
s = s + s;
// 去掉这个中间变量 ,直接写就可以了 BSTR tbstr = s.AllocSysString();
tempStr = s.AllocSysString();
return S_OK;

------解决方案--------------------
tempStr = &tbstr;
这句改成:
*tempStr = &tbstr; 试试
------解决方案--------------------
VcDll.BSTRRefTest s这句调用是不是这样啊:
VcDll.BSTRRefTest(s)

------解决方案--------------------
BSTR tbstr = s.AllocSysString();
*tempStr = tbstr.Copy();
应该就可以了

------解决方案--------------------
vb 中没有指针概念,有retval定义的方法在vb中这样使用
s = VcDll.BSTRRefTest()
------解决方案--------------------
vc
[id(10), helpstring( "method testBSTR ")] HRESULT testBSTR(BSTR* lpsz);
STDMETHODIMP CHBLine1::testBSTR(BSTR *lpsz)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())

CString s = *lpsz;
s += "ffffffff ";
*lpsz = s.AllocSysString();
return S_OK;
}

vb
Dim str As String
str = "1234 "
obj.testBSTR str
MsgBox str