由于我个人不是很了解ATL的东西,所以先写了一个Win32 DLL,在Win32 DLL中实现了实际的操作。然后再写了一个ATL DLL,ATL DLL主要是实现了接口定义,然后在接口函数中调用Win32 DLL,采用隐式调用(包含Win32 lib)。
自己写了一个VB的程序调用这个ATL DLL,一切正常。写了一个VC的测试程序调用ATL DLL,也一切正常。当用WEB来调用这个ATL DLL的时候,采用VB Script,提示的错误是:ActiveX部件不能创建对象。WEB的代码如下:
<html>
<body>
<script language="VbScript">
On Error Resume Next
set oReq =CreateObject("xxxLib.xxxEngine")
if err<>0 then
alert Err.Description
else
alert("hi")
end if
</script>
<br>
</body>
</html>
其中xxxLib是ATL DLL定义的库,xxxEngine是ATL的接口。有谁知道这个是为什么?应该如何改?
自己写了一个VB的程序调用这个ATL DLL,一切正常。写了一个VC的测试程序调用ATL DLL,也一切正常。当用WEB来调用这个ATL DLL的时候,采用VB Script,提示的错误是:ActiveX部件不能创建对象。WEB的代码如下:
<html>
<body>
<script language="VbScript">
On Error Resume Next
set oReq =CreateObject("xxxLib.xxxEngine")
if err<>0 then
alert Err.Description
else
alert("hi")
end if
</script>
<br>
</body>
</html>
其中xxxLib是ATL DLL定义的库,xxxEngine是ATL的接口。有谁知道这个是为什么?应该如何改?
不明白为什么Cpp一定要让Web来调用实现。
2.没有办法,客户是用Web编写东西的,我只能提供一个atl控件给客户在web中使用。我最希望用c,这样我连atl都不用学。
静态链接那个win32 DLL
public IObjectSafetyImpl<CAtlCtrl, INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA>
COM_INTERFACE_ENTRY(IObjectSafety)
public IObjectSafetyImpl <CAtlCtrl, INTERFACESAFE_FOR_UNTRUSTED_CALLER ¦INTERFACESAFE_FOR_UNTRUSTED_DATA>
COM_INTERFACE_ENTRY(IObjectSafety)
应该放在什么地方了