描述:
我要往COM里面传递字符串,应该怎么样定义?我没写过这玩意儿,我们老大逼我搞一个出来~~
我是这样定义的
STDMETHOD (PrintOpen)(BSTR );//传递参数打开串口
我在实现函数这样写的。
STDMETHODIMP CPrintEx::PrintOpen(BSTR port = _bstr_t("com1"))
{
// TCHAR *szPort = ConvertBSTRToString(port);
LOGERR(LOGFILE,TEXT("PrintOpen has been called! The parm is %s\n"),port);
if(!com.Open((TCHAR*)port))
return S_FALSE;
return S_OK;
}
LOGERR是一个写日志文件的函数,作用就是为了察看传递的参数是否正确
当我在Web上调用的时候,日志文件写入的传递参数是错误的
//Web页面调用的代码
<HTML>
<HEAD>
<META NAME="GENERATOR" C />
<TITLE></TITLE>
<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>
<!--
Sub button1_onclick
DOcxtest1.printopen ("com1")
End Sub
-->
</SCRIPT>
</HEAD>
<BODY>
<P>
<INPUT id=button1 type=button value=Button name=button1>
<OBJECT id=DOcxtest1 classid=clsid:6622E24C-A348-4B33-AD1A-C9667A1B6ED7 CODEBASE="printdll.CAB">
</OBJECT>
</P>
</BODY>
</HTML>
下面是生成的日志
2004-09-11 21:13:15 PrintOpen has been called! The parm is c
参数传递的是Com1,可是接收到的只是c
我写日志文件的函数,里面的处理时使用wsprint传递到一个TCHAR数组中的。
请问在Com中,应该如何传递字符串才是正确的,是否定义的时候应该是BSTR *呢?
解决方案1:
char* p = (char*)(_bstr_t)(BSTR param);
p就是一个指向c风格字符串的指针
COM中应该传BSTR, 在ASP中应该把类型强制转换成CStr()
解决方案3:需要类型转换的。