我正在尝试将一个COM对象从ActiveX组件传递给JScript。到目前为止,我已经尝试了以下方法:
STDMETHODIMP CHSNetwork::CreateIPPPacket(VARIANT ** ppv)
{
IIPPacket *iipp;
HRESULT hr = CoCreateInstance(CLSID_IPPacket, NULL, CLSCTX_ALL, IID_IIPPacket, (void **)&iipp);
if(SUCCEEDED(hr) && ppv)
{
CComVariant cvar((IUnknown *)iipp);
hr = cvar.Detach(*ppv);
}
return hr;
}
以下JScript导致错误Variable uses an Automation type not supported in JScript
:
var hsn = new ActiveXObject("ZIENetwork.HSNetwork");
var ipp = hsn.CreateIPPPacket();
非常感谢任何帮助。感谢。
答案 0 :(得分:2)
阿。我知道了。我需要传递VARIANT *
而不是VARIANT **
。我想我仍然对指针指针感到困惑,因为它与COM的返回值有关。
因此正确的代码是:
STDMETHODIMP CHSNetwork::CreateIPPPacket(VARIANT * ppv)
{
// TODO: Add your implementation code here
IIPPacket *iipp;
HRESULT hr = CoCreateInstance(CLSID_IPPacket, NULL, CLSCTX_ALL, IID_IIPPacket, (void **)&iipp);
if(ppv)
{
CComVariant cvar((IUnknown *)iipp);
hr = cvar.Detach(ppv);
}
return hr;
}
答案 1 :(得分:0)
当然,如果你只传回一个界面,你可以传回一个IDispatch **或IUnknown **,你不需要VARIANT,只是想一想:)