各位大神帮下忙,为什么我得到的是指针而不是值?

mylovetiantian 2012-02-14 11:19:19

STDMETHODIMP Cgkztrw::PinReportPressed(char* cpKey,SHORT timeOut,BSTR* pwd,SHORT* val)
{
// TODO: 在此添加实现代码
HINSTANCE hDLL;//dll句柄
//HANDLE hCom;//串口句柄
pinReportPressed _rpwd;//声明函数指针
hDLL=LoadLibrary(L"ZT_EPP_API.dll");
ofstream fout;
fout.open("c:\\test.log",ios::app);
if(hDLL==NULL){
FreeLibrary(hDLL);
}else{
_rpwd=(pinReportPressed)GetProcAddress(hDLL,"ZT_EPP_PinReportPressed");
if(_rpwd!=NULL){
_rpwd(cpKey,timeOut);
fout<<"返回值的结果为:"<<*val<<".........password value..........."<<cpKey<<endl;
CComBSTR passwd=_com_util::ConvertStringToBSTR(cpKey);
pwd=&passwd;
fout<<"BSTR*的结果为:"<<pwd<<endl;
return S_OK;
}else{
fout<<"PinReportPressed函数指针为空!"<<endl;
}
}
return S_OK;
}

我的这段函数代码中,pwd的结果为什么是一个指针,而不是值?求各位大神帮帮忙解答下,谢谢了!
...全文
143 点赞 收藏 16
写回复
16 条回复
mylovetiantian 2012年02月14日
主要是我网页中要调用的,所以要显示这个BSTR* pwd的值此时我该如何改呢,还请明示多谢了!
回复 点赞
shentujun 2012年02月14日
BSTR* 是二级指针
回复 点赞
mylovetiantian 2012年02月14日
我改成SHORT类型的值后,结果可以正常输出,但是JS还是无法识别,undefined?为何?
回复 点赞
mylovetiantian 2012年02月14日
[Quote=引用 13 楼 sl51314240 的回复:]

如果是JS,那肯定得到的是指针啊,pwd会根据你的函数参数类型自动转换的
[/Quote]
如果要得到值,该怎么做呢,还请明示下,现在有点急,多谢了!
回复 点赞
mylovetiantian 2012年02月14日
如果这样,我怎么才可以得到值呢,大哥帮忙下, 有点着急!
回复 点赞
sl51314240 2012年02月14日
如果是JS,那肯定得到的是指针啊,pwd会根据你的函数参数类型自动转换的
回复 点赞
mylovetiantian 2012年02月14日
function PinReportPressed() {
var temp, val,pwd;
for(j=0;j<16;j++){
val = gkztrw.PinReportPressed(cpKey, 10000, pwd);
alert(temp + ".......temp" + val + "......." + pwd);
}
}

这个是我的JS函数调用的代码
回复 点赞
mylovetiantian 2012年02月14日
[id(4)] HRESULT PinReportPressed( [out] CHAR* cpKey,SHORT timeOut,[out] BSTR* pwd,[out,retval] SHORT* val);
这个事函数的声明;
回复 点赞
mylovetiantian 2012年02月14日
参数是在js中传递的!
回复 点赞
sl51314240 2012年02月14日
[Quote=引用 7 楼 mylovetiantian 的回复:]

CComBSTR passwd=_com_util::ConvertStringToBSTR(cpKey);
*pwd=passwd;
fout<<"BSTR*的结果为:"<<*pwd<<endl;
就是这样的,passwd是一个CComBSRT的值,pwd是一个[out] BSTR* pwd类型的指针,现在我需要把输出*pwd的值,可是还是输出的指针,而不是值,可以加我QQ详聊下吗!
……
[/Quote]

你怎么调那个函数的?
参数怎么传的?
BSTR pwd;
PinReportPressed(..&pwd..)才行啊,你参数别是穿的指针
回复 点赞
mylovetiantian 2012年02月14日
QQ1402389038
回复 点赞
mylovetiantian 2012年02月14日
CComBSTR passwd=_com_util::ConvertStringToBSTR(cpKey);
*pwd=passwd;
fout<<"BSTR*的结果为:"<<*pwd<<endl;
就是这样的,passwd是一个CComBSRT的值,pwd是一个[out] BSTR* pwd类型的指针,现在我需要把输出*pwd的值,可是还是输出的指针,而不是值,可以加我QQ详聊下吗!
回复 点赞
sl51314240 2012年02月14日
1.代码风格太糟糕,看不清
2.不知道你在说啥,代码不完整
回复 点赞
一丝晨光 2012年02月14日
pwd=&passwd;
不明显是指针么?问题的关键应该是: 是一级指针还是二级指针等等?和值有什么关系
回复 点赞
mylovetiantian 2012年02月14日
这样输出是没有用的,因为我要返回值,js调用,需要这个值的,现在的问题是如果单纯转换是没有问题的,可是当我传值的时候就是有问题的!
passwd是可以正常输出值的,但是当我第二次引用的时候就是指针了,所以我不知道该如何改才可以得到值,而不是地址,在返回的时候!
回复 点赞
Occam's_Razor 2012年02月14日
这样试试
fout<<"BSTR*的结果为:"<<(BSTR)passwd<<endl;

编译不过就这样

fout<<"BSTR*的结果为:"<<(WCHAR *)(BSTR)passwd<<endl;
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告