ATL 网页中调用方法问题

jamesjinyongming 2008-09-10 04:29:11
我做个一个简单的atl dll 用了simple object
做了一个方法

在网页中对控件的赋值没有问题,但是调用方法,就是出现script error这是什么问题?


方法:
STDMETHODIMP CCode::LoadParaments()
{
// TODO: Add your implementation code here
m_OutParaments = L"fdsfs";
// Fire_ReturnParaments();
return S_OK;
}

调用函数

<SCRIPT LANGUAGE="JavaScript">

function PassParameter()
{


MyActiveX1.LoadParaments();

}
</SCRIPT>


<INPUT TYPE="button" NAME="Submit"
VALUE="Submit" ONCLICK="PassParameter()">
...全文
295 38 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
sys0000 2008-09-12
  • 打赏
  • 举报
回复
楼主记得多给点分啊,这个马甲的技术分就快1000分啦
sys0000 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 jamesjinyongming 的回复:]
我知道原因了,谢谢 sys0000
是CLSID的问题
为什么要用
importlib("stdole32.tlb");
importlib("stdole2.tlb");

[
uuid(16ED5437-43A0-423D-AEAC-4C24D689DA91),
helpstring("Code Class")
]
coclass Code
{
[default] interface ICode;
};
而不是用
[
uuid(BD11B759-EF45-44F4-AA09-A01925186FAB),
version(1.0),
helpstring("A 1.0 Type Library")
]????
[/Quote]

Type Library是专门给脚本语言用的,可能里面只有属性的定义,没有方法的定义,具体不是很懂
jamesjinyongming 2008-09-12
  • 打赏
  • 举报
回复
我知道原因了,谢谢 sys0000
是CLSID的问题
为什么要用
importlib("stdole32.tlb");
importlib("stdole2.tlb");

[
uuid(16ED5437-43A0-423D-AEAC-4C24D689DA91),
helpstring("Code Class")
]
coclass Code
{
[default] interface ICode;
};
而不是用
[
uuid(BD11B759-EF45-44F4-AA09-A01925186FAB),
version(1.0),
helpstring("A 1.0 Type Library")
]????
sys0000 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 jamesjinyongming 的回复:]
我还是没有成功,估计可能是我浏览器的问题,但是也不一定,用full control建立的就可以调用方法的
[/Quote]

用的啥浏览器,

把安全级别设置低点试试
jamesjinyongming 2008-09-12
  • 打赏
  • 举报
回复
只要一放 MyActiveX1.Load(); 就报错
拿掉了光设置属性就没有问题
jamesjinyongming 2008-09-12
  • 打赏
  • 举报
回复
我还是没有成功,估计可能是我浏览器的问题,但是也不一定,用full control建立的就可以调用方法的
sys0000 2008-09-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jamesjinyongming 的回复:]
属性调用都成功了,你说IDispatch会没用吗?
[/Quote]

贴下有问题的对象定义代码
jamesjinyongming 2008-09-11
  • 打赏
  • 举报
回复
属性调用都成功了,你说IDispatch会没用吗?
jameshooo 2008-09-11
  • 打赏
  • 举报
回复
要实现IDispatch接口才行
jamesjinyongming 2008-09-11
  • 打赏
  • 举报
回复
这个问题没有人回答么?这个简单的方法我用full control实现是可以用的,但是simple object却不能用,估计是某个接口没有实现的原因,但是我看到网上有几篇文章也是按照simple object去做的,却说能实现,我不知道他们是瞎写的还是我的问题
sjdev 2008-09-11
  • 打赏
  • 举报
回复
楼主搞定没?代码传到网上大家看看。
jamesjinyongming 2008-09-11
  • 打赏
  • 举报
回复
我试了一下,用full control是可以调用方法的,就是simple object生成的方法不行
zhangvbcs 2008-09-11
  • 打赏
  • 举报
回复
测试了一下可以。
JS:
HTML>
<HEAD>
<TITLE>Test html</TITLE>
</HEAD>
<BODY>
<script language="javascript">
function Add()
{
MyActive.bstr="MyActive11111";
MyActive.TestFunc();
alert(MyActive.bstr);
}
</script>
<OBJECT ID="MyActive" CLASSID="CLSID:5BC55A5F-ADF7-49C9-8644-A72AB12FD60D"></OBJECT>
<INPUT TYPE="button" NAME="Submit" VALUE="Submit" ONCLICK="Add()">
</BODY>
</HTML>
ATL:
CComBSTR bstr;
STDMETHOD(get_FuncParam)(/*[out, retval]*/ BSTR *pVal);
STDMETHOD(put_FuncParam)(/*[in]*/ BSTR newVal);
STDMETHOD(TestFunc)();

STDMETHODIMP CHtmlActive2::TestFunc()
{
// TODO: Add your implementation code here
::MessageBoxW(NULL,bstr,bstr,1);
::MessageBoxW(NULL,L"Welcome to here",L"TestFunc",1);
Fire_MyEvent();
return S_OK;
}

STDMETHODIMP CHtmlActive2::get_FuncParam(BSTR *pVal)
{
// TODO: Add your implementation code here
*pVal=bstr.Copy();
return S_OK;
}

STDMETHODIMP CHtmlActive2::put_FuncParam(BSTR newVal)
{
// TODO: Add your implementation code here
bstr=newVal;
return S_OK;
}

贴出来了例子代码。
但是设置它的值的时候没有成功。
不知道为什么。
zhangvbcs 2008-09-11
  • 打赏
  • 举报
回复
借宝地问个问题:
最近也在作者方面的东西,想问一下大家这种程序怎么来调试呀。(就像VC中的调试程序)
sys0000 2008-09-11
  • 打赏
  • 举报
回复
<HTML>
<HEAD>
<TITLE>ATL 3.0 test page for object Code </TITLE>
</HEAD>


<SCRIPT LANGUAGE="JavaScript">
function PassParameter()
{
MyActiveX1.Load();
}
</SCRIPT>

<BODY>
<OBJECT ID="MyActiveX1" CLASSID="CLSID:6BF33E3B-ABF7-4851-A447-2BFA009AFE2D"> </OBJECT>

<INPUT TYPE="button" NAME="Submit" VALUE="Submit" ONCLICK="PassParameter()">
</BODY>
</HTML>

只调用方法试试
jamesjinyongming 2008-09-11
  • 打赏
  • 举报
回复
还是不行
sys0000 2008-09-11
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 jamesjinyongming 的回复:]
试了,改了,还是没有用,你把代码发给我看看哪
[/Quote]

咋改得,Value值不能是Submit,因为你后面的有Name是这个

再改写试试:<INPUT TYPE="button" NAME="Submit" VALUE="PassParameter" ONCLICK="PassParameter()">
jamesjinyongming 2008-09-11
  • 打赏
  • 举报
回复
试了,改了,还是没有用,你把代码发给我看看哪
sys0000 2008-09-11
  • 打赏
  • 举报
回复
<INPUT TYPE="button" NAME="Submit" VALUE="Submit" ONCLICK="PassParameter()">

NAME与VALUE不能使用一样的值!!!!!!
jamesjinyongming 2008-09-11
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 sys0000 的回复:]
我刚才写了个测试程序,属性和方法都可以,没问题的。

把你的脚本调用的全部代码贴上来看看
[/Quote]
你把代码发到我邮箱里,我看看
jinyongming@163.com
加载更多回复(18)

3,248

社区成员

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

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