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
我写一个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