VC代码片断:
short CVC::GetList(BSTR List)
{
CString szList = _T("new string");
wcscpy(List, szList);
return 0;
}
BEGIN_DISPATCH_MAP(CVC, COleControl)
DISP_FUNCTION(CVC, "GetList", GetList, VT_I2, VTS_BSTR)
END_DISPATCH_MAP()
afx_msg short GetList(BSTR List);
[id(1)] short GetList(BSTR List);
JavaScript调用:
//开一个足够大的zifuchu空间
var aa = "11111111111111111111111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111111";
obj.GetList(aa);
alert( aa);
说明:这种方法可能会造成一些内存泄露,没有验证过。
网上也有这种调用方法:(我没有试过)
IDL文件中这样声明
[id(1), helpstring("method GetString")] HRESULT GetString([out,retval]BSTR* pstr);
头文件中:
STDMETHOD(GetString)(/*[out,retval]*/BSTR* pstr);
CPP中
STDMETHODIMP CCJSString::GetString(BSTR *pstr)
{
USES_CONVERSION;
SysReAllocString(pstr, T2OLE("xxxx"));
return S_OK;
}
JS中直接调用就可以了,不需要填写参数 var xx= xxx.GetString();