JS调用COM组件是什么意思

JavaScript013

JS调用COM组件是什么意思,第1张

在js下面直接将function传给这个属性,com组件里面调用这个IDispatch的函数即可。

idl文件,注意onevent1这里。

[plain] view plain copy

import "oaidl.idl"

import "ocidl.idl"

[

object,

uuid(6A6140E8-9356-4FBD-B0FD-04508D336B17),

dual,

nonextensible,

pointer_default(unique)

]

interface IComClassTest : IDispatch{

[id(1)] HRESULT Method1(BSTR arg1)

[propget, id(2), bindable, displaybind] HRESULT onevent1([out, retval] VARIANT* pVal)

[propput, id(2), bindable, displaybind] HRESULT onevent1([in] VARIANT newVal)

}

[

uuid(97157E1C-637C-4962-B069-96E70F572A99),

version(1.0),

]

library ATLProject3Lib

在javascript中先定义一个该COM的对象,然后用 var iResult = Com对象.sum(1, 2)这样iResult变量就会接到*pVal的值。但是要保证*pVal的类型是out的,而且必须是retval的,否则外面调用时是接不到的。

COM组件通过 BSTR* 数据类型将一个字符串从接口方法内部返回给外部js的,如下接口方法: HRESULT GetFilePath([out,retval] BSTR* bstrFilePath)为COM组件中C++的标准形式,可以看到参数是指向BSTR类型的指针,而js是没有指针数据类型的。该方法经js调用后变为: var varFilePath = GetFilePath()即在外部做了转换,把C++的具有带出引用功能的形参bstrFilePath作为了返回值给了js,该参数就会将GetFilePath函数内部的路径字符串作为返回值返回给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")