开发的com组件在vbs脚本中不能使用

崔作非 2013-07-19 09:31:38
用VS2012 向导生成的代码,自己用VC写的客户端可用,vbs脚本中不行,createobject时就报错了。

附上IDL代码,大家帮看看,谢谢。

#include "olectl.h"
import "oaidl.idl";
import "ocidl.idl";

[
object,
uuid(48C24529-A3C9-424A-B0EB-3E1FDCC99599),
dual,
nonextensible,
pointer_default(unique)
]
interface Imaths : IDispatch{
[id(1)] HRESULT Mod([in] LONGLONG number, [in] LONGLONG divnum, [out,retval] LONGLONG* result);
};

[
uuid(8EA03867-77DD-4901-8586-45071CA9A14B),
version(1.0),
]
library MathLib
{
importlib("stdole2.tlb");
[
uuid(DB4111A1-8D21-451F-A6AD-F8E72171EC3C)
]
dispinterface _ImathsEvents
{
properties:
methods:
};
[
uuid(33D88987-1FE7-43B8-BC3D-0A351FC5BA68),
control
]
coclass maths
{
[default] interface Imaths;
[default, source] dispinterface _ImathsEvents;
};
};

...全文
189 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
崔作非 2013-07-25
  • 打赏
  • 举报
回复
这个问题我后来解决了,因为之前连续发三贴了不能再发了,正好就楼上的朋友,发一下解决方案。 64位环境下需要利用命令行参数来调用 即:c:\windows\SysWOW64\wscript.exe calldll.vbs ,不然会创建对象失败,32位系统直接执行calldll.vbs即可。 原因是系统中同时存在32位和64位两个脚本宿主程序,path里默认的是system32的路径,而64位exe文件不能调用32位的dll文件。
wuzhifei 2013-07-23
  • 打赏
  • 举报
回复
我顶!!我也遇到这个问题!!
崔作非 2013-07-19
  • 打赏
  • 举报
回复
刚发现在网页中可以执行,但在命令行提示符下能执行,难道是权限问题?已经获得了管理员UAC的权限了。
崔作非 2013-07-19
  • 打赏
  • 举报
回复
vbs给出的错误提示是 activex 部件不能创建对象 'JDMath' 错误代码 800A01AD
崔作非 2013-07-19
  • 打赏
  • 举报
回复
资源文件 HKCR { JDMath.1 = s 'maths Class' { CLSID = s '{33D88987-1FE7-43B8-BC3D-0A351FC5BA68}' } JDMath = s 'maths Class' { CurVer = s 'JDMath.1' } NoRemove CLSID { ForceRemove {33D88987-1FE7-43B8-BC3D-0A351FC5BA68} = s 'maths Class' { ProgID = s 'JDMath.1' VersionIndependentProgID = s 'JDMath' ForceRemove Programmable InprocServer32 = s '%MODULE%' { val ThreadingModel = s 'Apartment' } ForceRemove Control ForceRemove 'ToolboxBitmap32' = s '%MODULE%, 106' MiscStatus = s '0' { '1' = s '%OLEMISC%' } TypeLib = s '{8EA03867-77DD-4901-8586-45071CA9A14B}' Version = s '1.0' } } } Set comcall = CreateObject("JDMath") 或Set comcall = CreateObject("JDMath.1") 都会报错,这个字符串应该没写错吧。 其实自己写的代码很少,就一个方法,实现64位的整除。 STDMETHODIMP Cmaths::Mod(LONGLONG number, LONGLONG divnum, LONGLONG* result) { // TODO: 在此添加实现代码 if (divnum==0) { *result=-1; return S_OK; } *result=number%divnum; return S_OK; }
  • 打赏
  • 举报
回复
idl文件看不出来啥问题

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧