C++手动创建OCX控件,CHAR*参数传递问题

wker 2016-03-16 09:54:01
由于项目需要,需要把以前的DLL改成OCX控件,在这里向各位前辈大神请教一下参数传递上的问题,我之前的函数原型为
int XHX_Dog_RefDrv(char *sVID,char *sPID,char *sPVN,char *sPATH);
我在新建的ACTIVEX项目中的MFC CLASSWIZARD窗口里创建新方法时,参数类型应该选择什么呢?我看有些文章说的是应该选BSTR,但我找了半天只找到BSTR*
...全文
907 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36659966 2017-03-07
  • 打赏
  • 举报
回复
请问楼主最后是怎么解决的?我这边也需要从ocx控件中返回字符串给web网页,参数类型到底怎么用呢?请不吝赐教,感谢!
oyljerry 2016-03-16
  • 打赏
  • 举报
回复
可以用BSTR*类型。自己做类型转换就可以了
zgl7903 2016-03-16
  • 打赏
  • 举报
回复
就用BSTR*, ActiveX 原则上不支持非UNICODE的参数传递
BSTR CT2Ctrl::TestFun(BSTR FAR* a, short b) 
{
  CString strResult;
  // TODO: Add your dispatch handler code here
  
  strResult += *a;
  CString tmpStr;
  tmpStr.Format(_T("%d"), b);
  strResult += tmpStr;

  return strResult.AllocSysString();
}
  BSTR a = L"abcdefg";
  CString str = m_T2.TestFun(&a, 1000);
redui 2016-03-16
  • 打赏
  • 举报
回复
CA2W / CW2A
Saleayas 2016-03-16
  • 打赏
  • 举报
回复
如果最后一个参数是传出参数,那么必须是 char ** 这样,才是传出字符串。而且需要指明内存分配方式。 int XHX_Dog_RefDrv(char *sVID,char *sPID,char *sPVN,char *sPATH); 而上面这样,最后一个参数不是传出的字符串参数,而是一个传入缓冲区。而且没有大小的参数。 可能是文档协议里面有这个缓冲区的大小,比如在 Windows 系统是 MAX_PATH 的大小。 其实这样的方法签名是不严谨的。 int __stdcall XHX_Dog_RefDrv(char const *sVID,char const *sPID,char const *sPVN,char *sPATH, int nPath); 如果这样去写所有的参数都是传入的。 IDL HRESULT Dog_RefDrv([in] BSTR bstrVID, [in] BSTR bstrPID, [in] BSTR bstrPVN,[out, retval] BSTR *pbstrPATH); 这样,最后一个参数才是传出的返回值。 给这个参数赋值使用 先把 char * 转换成 OLESTR ,然后使用 SysAllocString 创建 BSTR。 *pbstrPath = SysAllocString(...);
wker 2016-03-16
  • 打赏
  • 举报
回复
引用 3 楼 Saleayas 的回复:
如果是传入字符串,使用 BSTR。 如果是传出字符串,使用 BSTR *。 其实最好的参数是 VARIANT 和 VARIANT *。 VT = VT_BSTR。 诸如 JS 脚本中的,那么无类型的变量都是 VARIANT 的。
请问我最后一个参数是传出参数,现在使用BSTR*或者VARIANT *,而要传出的值在char*中,我需要如何转换呢?如果可以的话,请给一段代码,谢谢。
Saleayas 2016-03-16
  • 打赏
  • 举报
回复
如果是传入字符串,使用 BSTR。 如果是传出字符串,使用 BSTR *。 其实最好的参数是 VARIANT 和 VARIANT *。 VT = VT_BSTR。 诸如 JS 脚本中的,那么无类型的变量都是 VARIANT 的。

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧