CB6写的COM组件,以C#等语言下能正常调用,JavsScript中不能调用
CB6写的COM组件,以C#等语言下能正常调用,JavsScript中不能调用函数。
我用CB6写了一个COM组件,里面只有一个接口,接口下有两个函数,在C#中能正常使用,在IE 采用 JaveScrpt不能正常调用,
class ATL_NO_VTABLE TPACSViewImpl :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<TPACSViewImpl, &CLSID_PACSView>,
public IDispatchImpl<IPACSView, &IID_IPACSView, &LIBID_iHYPACSView>,
public IObjectSafetyImpl<TPACSViewImpl, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>
{
private:
AnsiString m_sPipeName;
private:
void __fastcall WriteServerAddress(BSTR ServerIP, unsigned_short ServerPort);
AnsiString __fastcall encrypt(AnsiString Source, int PinKey);
bool __fastcall OpenPACSImageViewWindow(AnsiString sUserName, AnsiString sUserPw, unsigned_short uRouteID);
bool __fastcall SendImageCommand(AnsiString sCommand);
bool __fastcall CheckPACSImageView();
public:
TPACSViewImpl()
{
//创建命名管道
m_sPipeName = "\\\\.\\Pipe\\ClinicalView";
}
// Data used when registering Object
//
DECLARE_THREADING_MODEL(otApartment);
DECLARE_PROGID("iHYPACSView.PACSView");
DECLARE_DESCRIPTION("GreatPACS ImageView");
// Function invoked to (un)register object
//
static HRESULT WINAPI UpdateRegistry(BOOL bRegister)
{
TTypedComServerRegistrarT<TPACSViewImpl>
regObj(GetObjectCLSID(), GetProgID(), GetDescription());
return regObj.UpdateRegistry(bRegister);
}
BEGIN_CATEGORY_MAP(TPACSViewImpl)
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
END_CATEGORY_MAP()
BEGIN_COM_MAP(TPACSViewImpl)
COM_INTERFACE_ENTRY(IPACSView)
COM_INTERFACE_ENTRY2(IDispatch, IPACSView)
COM_INTERFACE_ENTRY(IObjectSafety)
END_COM_MAP()
// IPACSView
public:
STDMETHOD(CloseImageView());
STDMETHOD(OpenImageView(BSTR ServerIP, short ServerPort, BSTR PACSUserName,
BSTR PACSUserPW, short RouteID, long ImageID,
VARIANT_BOOL AddedView));
};
请高手指点一下,我直接在本机注册COM,使用如下代码在IE中运行,对象能创建,调用函数失败。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>无标题页</title>
<script language="JavaScript" type="text/javascript">
function look()
{
var pacs = null;
pacs = new ActiveXObject("iHYPACSView.PACSView"); //请确保浏览器允许加载该控件。
try {
//pacs.CloseImageView();
pacs.OpenImageView("125.91.214.2", 8701, "9000", "9000", 2, 100, true);
}
catch (e) {
alert("调用函数失败," + e.name + ": " + e.message);
}
}
</script>
</head>
<body>
<a> 查看图像请点击
<input type="button" value="查看图像" onclick="look();" /></a>
</body>
</html>