高分。之前发过,还是没有解决。关于BSTR
高分求助。之前发过,还是没有解决。关于BSTR,高手请进HRESULT WINAPI EXPORT getDriverName(INT in_nIndex,
高分求助。之前发过,还是没有解决。关于BSTR,高手请进
HRESULT WINAPI EXPORT getDriverName(INT in_nIndex, BSTR out_pScannerModelName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
out_pScannerModelName = ::SysAllocString(gManager.GetModelName(in_nIndex));
if(out_pScannerModelName!=NULL)
{
return S_OK;
}
else
return S_FALSE;
}
就是要获取驱动的名字用out_pScannerModelName保存,为什么我加断点调试,在DLL内部,out_pScannerModelName内容为“S300”,然而,我在测试类中这样调用
TCHAR szModelName[100];
::getDriverName(1,szModelName);
AfxMessageBox(szModelName);
却返回为空。求大神帮忙
[最优解释]wchar_t * EXPORT getDriverName(INT in_nIndex)
if(out_pScannerModelName!=NULL)
{
return out_pScannerModelName;
}
else
return _T("Faile");
AfxMessageBox(::getDriverName(1));
[其他解释]用地址或者引用~
[其他解释]谢谢,这种方法的确能实现,但是函数定义为开发文档规定,不能改变,只能用参数out_pScannerModelName进行保存返回,我的意思就是说,如何用BSTR型参数进行保存返回,这是重点,谢谢
[其他解释]BSTR类型不是一个指针吗,如题所示,为什么当我在调用时候,dll中的out_pScannerModelName明明指向一个“S300”的地址,而在测试类中调用::getDriverName(1,szModelName);,凡获得szModelName为空,说明还是没有返回,在出了DLL之后就释放了?怎么修改
[其他解释]里面的总觉得是个副本。。。
[其他解释]谢谢,搞定了,没有加引用。。。估计是文档错误。。
[其他解释]测试进行中。。。
[其他解释]需要拷贝到你数组里
类似strcpy