我写一个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输入并返回字符串呢?谢谢!
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输入并返回字符串呢?谢谢!
解决方案 »
- 开机自启动程序,程序自启动后无法连接Access数据库。
- 【100分求救】 早前写的COM接口的DLL,现只能在控制台或Windows工程中运行,WEB工程却运行不了,大家帮分析一下!!
- Button焦点问题
- 请问如何在VC做的控件中加一个枚举型的属性?在线等
- LOWORD这个宏是在什么情况下会用到。
- 怎么显示的是两条信息???
- 谁能讲讲windows对我们程序员说的内核结构啊??
- Gnome桌面显示不出来?
- 发送post请求的格式是什么
- ==========诸位兄台,如何获得一个字附的点阵数,象“A”的点阵数是XX(我也不知道)==========
- CSocket 单独用好,还是和CArchive一起用好,急急急
- 该内存不能为“read”
s = s + s;
// 去掉这个中间变量 ,直接写就可以了 BSTR tbstr = s.AllocSysString();
tempStr = s.AllocSysString();
return S_OK;
这句改成:
*tempStr = &tbstr; 试试
VcDll.BSTRRefTest(s)
[id(7), helpstring("method BSTRRefTest")] HRESULT BSTRRefTest([out,retval] BSTR *tempStr);
发现如果将*tempStr定义为[out,retval]就会出现上述问题,而定义为[in,out]就可以运行,但只能向dll传入字符串,无法将修改结果传回给vb程序,请问是什么原因?如何修改?谢谢!
*tempStr = tbstr.Copy();
应该就可以了
s = VcDll.BSTRRefTest()
s = VcDll.BSTRRefTest()得到的s是个空字符串啊,如果改成
ss = VcDll.BSTRRefTest(s)依然报上面的错误。
我把dll程序修改如下
[out,retval]BSTRRefTest(BSTR *tempStr)
{
CString s = "aaaaa";
BSTR tbstr = s.AllocSysString();
tempStr = &tbstr; return S_OK;
}
得到的也是空字符串,为什么?谢谢!
[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