如何在COM组件接口方法中返回一个字符串给js?

Vue+ECharts-GL 3D地图实战:5层叠加打造炫酷中国地图(附完整代码) 本文详细介绍了如何利用Vue和ECharts-GL构建具有强烈立体感的3D中国地图。通过5层图层的巧妙叠加与样式调校,实现了从背景阴影到交互高光的完整视觉层次,并整合了动态飞线与散点标记。文章提供了完整的代码实现、核心配置解析以及性能优化与视觉调优的实战技巧,帮助开发者快速打造专业级的交互式地图可视化应用。 阅读详情
 

如何在COM组件接口方法中返回一个字符串给js?  

2011-05-02 18:54:55|  分类: 默认分类 |  标签: |字号大中小 订阅

COM组件通过   BSTR*     数据类型将一个字符串从接口方法内部返回给外部js的,如下接口方法:

 

HRESULT GetFilePath([out,retval] BSTR* bstrFilePath);

为COM组件中C++的标准形式,可以看到参数是指向BSTR类型的指针,而js是没有指针数据类型的。该方法经js调用后变为:

 

var varFilePath =  GetFilePath();

即在外部做了转换,把C++的具有带出引用功能的形参bstrFilePath作为了返回值给了js,该参数就会将GetFilePath函数内部的路径字符串作为返回值返回给js。需要注意的是:在C++中通过向导生成或手动添加GetFilePath函数时,需要把参数的out和retval属性都勾选或添加上,否则不会返回给js。

另外,在GetFilePath([out,retval] BSTR* bstrFilePath);实现时,不要用Getbuffer,而应该用AllocSysString函数,前者返回的只能在vc是正确的,到了js有时不正确(字符串有时会被截断)

如:

STDMETHODIMP CTest::GetFilePath(BSTR* bstrFilePath)
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());

CString strFilePath = _T("c:\\1.TXT");
* bstrFilePath =  strFilePath.AllocSysString(); // 不要用strFilePath.GetBuffer();

 return S_OK;
}

YOLOv9改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA、Swin Transformer等注意力和多头注意力机制 这篇文章带来一个经典注意力模块的汇总,虽然有些模块已经发布很久了,但后续的注意力模块也都是在此基础之上进行改进的,对于初学者来说还是有必要去学习了解一下,以加深对模块,模型的理解。 阅读详情

相关推荐

全同态加密:CKKS

不论是 LSB 编码的 BGV,还是 MSB 编码的 BFV,它们的同态运算都是对 $\mathbb Z_t$ 上明文的**精确计算**,因为**密文中的明文空间和噪声空间是分离的**。例如,在 BGV 中是 $te+m$,在 BFV 中是 $\delta m+e$。但是,这种精确计算是在同余意义下的,如果将明文视为实数,那么实际上同态运算时的噪声破坏了明文的 MSB $\lfloor m/t \rfloor$,仅保留了 LSB $[m]_t$,

weixin_44885334的博客 7546

Com中BSTR的使用

Com中BSTR的使用详解一:<br />BSTR:<br />BSTR(Basic STRing)实际上是类Pascal字符串,在BSTR的前4个字节保存了字符串长度,所以BSTR内部可以包括/0,它也不是靠/0来判断字符串结尾的。BSTR在c/c++中的定义实际上是wchar_t*,但因为BSTR是依靠前4个字节来判断字符串长度的,所以它的分配和释放都不同于普通的字符串,需要通过::SysAllocString和::SysFreeString等函数来分配和释放。<br />Com的接口中要使用字符串的话

Jinhill's Blog 1万+

字符集的选择

字符集的选择 一:背景介绍 DICOM特定字符集(0008,0005) 此标签获得不同的值就代表使用不同的语言进行解码。 以下为多家CT厂商的(0008,0005)取值: 字符集: unicode是字符集,ASCII、GB2312、GBK、GB18030既是字符集也是编码方式,UTF-8只是编码方式。 二:中文字符集介绍 世界通用字符集——UTF 中文字符集——GB2312、GBK、GB18030 字符集的详细介绍 一:UTF-8 程序是把一个字节一个字节的来读取,然后再根据字节中开头的bit

qq_41972968的博客 1520

ATL接口返回类型&&ATL接口返回字符串BSTR*

感觉在ATL中做COM组件,添加方法的时候,其返回值只能是HRESULT,我想返回其他数据类型,可以吗? 非也非也 HRESULT指示返回的状态,即正确与否, 返回值是这样的 HRESULT MyMethod([in]int p1,[out,retval]int *pRetval); 在VB和脚本里就可以n=obj.MyMethod(123) 这是COM规范规定的,其他同上 COM规范并没有...

weixin_34072637的博客 462

AntV G6避坑指南:折叠树状图那些意想不到的BUG(附解决方案)

本文深入剖析了在React项目中使用AntV G6实现折叠树状图时,从图标错乱、数据同步到状态管理的常见BUG与解决方案。文章基于实战经验,详细解读了G6的内部机制,提供了从环境配置、自定义节点绘制到事件处理与性能优化的完整避坑指南,帮助开发者彻底解决折叠展开功能的疑难杂症。

wasm7browser的博客 256

【小白指南】如何将deepseek引入WPS\Word\Excel中去?

如何将deepseek引入WPS\Word\Excel中去?纯小白都能看的懂,一步步操作就能行

2503_90498422的博客 1万+

【组件专题】初识COM组件

COM组件

597

TouchGFX在STM32上的移植全过程:超详细版指南

深入讲解将TouchGFX集成到STM32开发环境的每一步,涵盖配置、驱动适配与UI调试。无论是初学者还是进阶开发者,都能快速掌握TouchGFX在嵌入式平台的应用技巧。

weixin_42443533的博客 600

走进COM组件系列(三)

前面介绍了,走进COM组件系列(二),在此基础上,我们构建参数在模块之间的传递。   其他内容请浏览COM+分类   首先修改idl文件,在接口方法中加入参数 interface IY : IUnknown { HRESULT Fy([in] int x, [out] int * y); }; 对于标记为in的参数,MIDL将知道仅仅需要将此参数值从客户传递给组件,不需要任何...

简约不简单 192

2024年数字IC秋招-海康威视-数字逻辑设计工程师-笔试题

笔试题型:单选 + 多选笔试平台:百一测试(电脑监控)笔试时间:1h30minA. AW通道B. D通道C. B通道D. AR通道return x++;x = 5;y = Foo(x);

qq_42135020的博客 3201

YOLOv8实战教程:从模型训练到改进的全流程指南

回顾这段YOLOv8的实战历程,从最初的模型训练到后来的各种改进尝试,我深刻体会到目标检测技术的魅力与挑战。YOLOv8作为一款优秀的框架,不仅易用性强,而且具备很强的可扩展性,让我能在其基础上不断创新。未来,我计划在以下几个方向继续探索:一是将YOLOv8与多模态技术结合,尝试实现图像与文本的联合目标检测;二是深入研究自监督学习在YOLOv8中的应用,减少对标注数据的依赖;三是探索YOLOv8在更广泛场景的部署,如机器人、自动驾驶等。

LXY_LOVE36的博客 281

COM与Javascript交互

1、COM调用Javascript函数 void CWebShareView::GoToPage(OLECHAR* pszFunct, UINT nCurSel) { HRESULT hr; LPDISPATCH pDisp = GetHtmlDocument(); IHTMLDocument2* phd=NULL; hr = pDisp->QueryInterfac

qinwei4072880的专栏 1567

基于STM32XX的LCD液晶显示屏(HS19264G06A、驱动芯片:ST7525)驱动C程序设计

define USE_HW_SPI 1 // 1:使用硬件SPI, 0:使用软件模拟SPI。

myron6688的博客 235

在JS中使用COM组件的方法

首先创建一个COM组件,插入一个双接口Itest,在此接口上实现以下三个方法: STDMETHODIMP Ctest::test(void) //无输入输出参数 { // TODO: 在此添加实现代码 MessageBox(NULL,L"test",L"test",MB_OK); return S_OK; } ...

weixin_38168728的博客 1112

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

js获取Com组件的字符串数组

1. COM相关接口函数实现, 接口getStepArraytypedef struct tagStepInfo{ int iDigit; CComBSTR bstrText;}SETPINFO;STDMETHODIMP CXXX::getStepArray(VARIANT *pVariant){ // TODO: Add your implementatio

hqulyc的专栏 3011

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

在javascript中使用com组件的方法

转载自:http://dhailin.blog.163.com/blog/static/230738322011128102043880/ 首先创建一个COM组件,插入一个双接口Itest,在此接口上实现以下三个方法: [cpp]view plaincopy STDMETHODIMPCtest::test(void)//无输入输出参数{//TO...

SurpassLi的专栏 52

JS和COM口通信

在VB6.0下基于MSComm.ocx控件的开发,实现JS页面和COM口通信打印小票的功能

Flying_Highter_Birds的专栏 1万+

COM组件【OUT】

COM组件通过   BSTR*     数据类型将一个字符串从接口方法内部返回给外部js的,如下接口方法:   HRESULT GetFilePath([out,retval] BSTR* bstrFilePath); 为COM组件中C++的标准形式,可以看到参数是指向BSTR类型的指针,而js是没有指针数据类型的。该方法经js调用后变为:   var varFile

fin86889003的专栏 1020

javascript获取COM或ATL返回的数组(整型或字符串数组)VBArray相关

javascript获取COM或ATL返回的数组(整型或字符串数组)     最近笔者工作中碰到一个问题就是在ATL返回的字符串数组,在js脚本中怎么都获取不到,于是去网上看看有没有解决方案,但是总体感觉很乱,当然也看到一个重要的信息, 感谢那位作者,当时发现一篇05的帖子也是该问题,没人解答,正好笔者有幸搞定,现抛砖引玉下,希望牛人提出意见    首先,举例返回字符串数组的情况:

xt_chaoji的专栏 2073

JavaScript 操作 COM 控件

目标:用JavaScript 脚本代码调用COM控件,实现基本功能操作: 1.定义及初始化COM控件; 2.调用COM接口; 3.注册COM事件并实现事件调用。1. 定义及初始化COM控件      在HTML页面定义一个object标签来加载COM控件: 1) classid:是COM控件的编号,用来唯一识别一个COM控件; 2) id:是JavaScript调用COM控件时访...

gepangtsai 210

js字符串数组传入Com组件里

1. javascript代码如下var arArray = new Array("1","sadf","2","asdff","test");if (document.AtlComId){ document.AtlComId.putVariant(arArray);}<object classid="clsid:XXXXXXXX-XXXX-XXXX-XXXX

hqulyc的专栏 2251

从ATL中返回字符串数组到JavaScript的示例

测试环境:VS2008 SP1 + WinXP SP3 测试时间:2012-5-11 ATL中的代码 STDMETHODIMP CSnapshot::GetFilesFromClipboard(VARIANT* retVal) { std::list listFiles = getFilesFromClipboard(NULL); std::list::iterator it

lee353086的专栏 3133

C#编写COM组件

1、新建一个类库项目2、将Class1.cs改为我们想要的名字问是否同时给类改名,确定3、修改Properties目录下面的AssemblyInfo.csComVisible属性设置为True4、项目菜单->MyLib属性找到“生成”选项卡往下看,找到“为 COM Interop 注册”勾上5、继续往下,找到“签名”选项卡 勾上“为程序集签名” 在下面的下拉...

aaa407217484的博客 114

在Javascript里如何调用用ATL Simple Object生成的com组件

我们知道在html里可以用Tag嵌入com组件,这里讲怎样动态创建com对象。 在javascript脚本里new一个ActiveXObject对象,例如:var object = new ActiveXObject("ATLOne.ComUnit");object是一个全局变量,然后可以在脚本里可以调用object的方法或属性。注意这里ATLOne.ComUnit的结构是 “

ssliao的专栏(程序感悟,人生体会) 1637

VC/MFC中通过CWebPage类调用javascript函数(给js函数传参,并取得返回值)

①需要一个别人写好的类CWebPage,将其对于的两个文件WebPage.h和WebPage.cpp添加到工程中。    CWebPage类头文件和实现文件下载地址:    http://download.youkuaiyun.com/detail/masikkk/4427190 ②添加WebBrowser控件,在视图/对话框类的头文件中#include "webbrowser2.h",增加成员变量

Why So Serious? 5230

IDispatch - Windows中COM对象暴露出来的接口,支持不同语言与C++互调,附C++代码示例。

朋友们周末好,在这总结一下这周的比较难的问题,到现在仍然是懵的,因为技术太老了,几乎没人用的那种程度。如JS调用C++的代码,JS是脚本语言,而C++是过程语言,IDispatch提供了协议让他们之间能够沟通,相互调用,其实换成其他语言也行,只要是IDispatch支持的都可。那么就简单介绍吧。 IDispatch 接口是 OLE 自动化的核心接口,提供了一组方法用于动态调用 OLE 自动化对象的方法和属性。通过中间层来实现不同种类语言的互动,突然想起了一段话:其实计算机的核心就是中间件,好多互相无法互动

Bobowen的博客 2362
上一篇: 在windows系统下用VC6编译最新版PHP5.3.3扩展(以vld为例)
下一篇: JavaScript检查ActiveX控件是否已经安装过
msbbc
博客等级 码龄18年 39粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值