我写一个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输入并返回字符串呢?谢谢!

解决方案 »

  1.   

    STDMETHODIMP CATLDll::BSTRRefTest(BSTR *tempStr)
    要改:
    STDMETHODIMP CATLDll::BSTRRefTest(BSTR tempStr)
      

  2.   

    谢谢CathySun118(斯年),可是这样岂不是只能vb向vc传入字符串,如何返回呢?谢谢!
      

  3.   

    大家好,我是楼主。我又检查了一下,我的程序是这样定义的:
    [id(7), helpstring("method BSTRRefTest")] HRESULT BSTRRefTest([out,retval] BSTR *tempStr);
    发现如果将*tempStr定义为[out,retval]就会出现上述问题,而定义为[in,out]就可以运行,但只能向dll传入字符串,无法将修改结果传回给vb程序,请问是什么原因?如何修改?谢谢!