Javascript调用activex,属性无效??

lizhigang34 2010-01-08 11:45:19
公司原来的程序员做的一个ActiveX,我现在想添加个属性,用javascript调用,结果似乎设置属性时不成功。。
但奇怪的是在桌面程序上调用时,成功的,这是怎么回事??
...全文
143 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjdev 2010-01-10
  • 打赏
  • 举报
回复
网页我不懂。请问你js调用什么时候被执行的?网页打开?
雪影 2010-01-08
  • 打赏
  • 举报
回复
看看你的SetIsSetBmp2函数的定义与实现
已经IDL描述
lizhigang34 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tttyd 的回复:]
1. 你的C++代码不能说明问题.
  js代码调用的是响应的get_xxxx函数,而不是put_xxx函数哦.
2. 你的组件中的每个属性有没有设置一个成员变量?
  否则js代码获取属性变量值无效.
[/Quote]
对的,每个属性对应一个成员变量,我用IE来调试我这个ActiveX,但在OnXX属性Changed()设置断点,程序不会走到这步,如果是桌面的就可以。。。

void CAVPlayerCtrl::OnIsSetBmp2Changed(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: 在此添加属性处理程序代码
//m_IsSetBmp2是我新加的属性
//m_sImageBuilder.m_sPreview.m_bIsSetBmp在其他的地方要用到这个属性
//在WEB上,我设置这个值是1,结果到使用m_sImageBuilder.m_sPreview.m_bIsSetBmp的地方看,结果还是初始值,就是说,程序在WEB版时,似乎没走到这一步。
m_sImageBuilder.m_sPreview.m_bIsSetBmp = m_IsSetBmp2;


SetModifiedFlag();
}
雪影 2010-01-08
  • 打赏
  • 举报
回复
建议lz将控件attach到IE浏览器或C++test进程中,单步调式一下属性设置与获取函数.
雪影 2010-01-08
  • 打赏
  • 举报
回复
1. 你的C++代码不能说明问题.
js代码调用的是响应的get_xxxx函数,而不是put_xxx函数哦.
2. 你的组件中的每个属性有没有设置一个成员变量?
否则js代码获取属性变量值无效.
sandyandy 2010-01-08
  • 打赏
  • 举报
回复
可以换个形式调用试试, 在onload的时候, 直接调用函数

function init()
{
var obj= document.getElementById("'Player100");
obj.SetConnectType(0);
obj.SetVideoEnable(true);
//...
}

lsvine 2010-01-08
  • 打赏
  • 举报
回复
把调试信息输出到文件。 或者直接在你本机调试 应该都可以
lizhigang34 2010-01-08
  • 打赏
  • 举报
回复
这是Javascript调用处

<html>
<head runat="server">
<title>无标题页</title>
</head>
<body>

<script language=javascript>
var text = "<object id='Player"+100+"'" +
" width='500' height='300' classid='clsid:7086A854-ED9F-4B83-94EE-E0F179113800'"
+"codebase='./AVPlayer/EVIPWebCommon.cab'>"
+"<param name='IsSetBmp2' value='1'/>"
+"<param name='TextOut2' value='EVIP WEB'/>"
+"<param name='Password' value='pppp'/>"
+"<param name='SvrType' value='3'/>"
+"<param name='SmgAddress' value='"+"127.0.0.1"+"'/>"
+"<param name='SmgPort' value='5834'/>"
+"<param name='CGIString' value='GET /CameraID="+"1008"+"&Type=zyh264 HTTP/1.0\r\n\r\n'/>"
+"<param name='VideoEnable' value='1'/>"
+"<param name='ConnectType' value='0'/>"
+"</object>";
document.write(text);

var myPlayer = document.getElementById("Player100");
alert("TextOut2: " + myPlayer.TextOut2
+ "\r\nIsSetBmp2: " + myPlayer.IsSetBmp2
+ "\r\nSvrType: " + myPlayer.SvrType
+ "\r\nSmgAddress: " + myPlayer.SmgAddress
+ "\r\nSmgPort: " + myPlayer.SmgPort
+ "\r\nCGIString: " + myPlayer.CGIString
+ "\r\nVideoEnable: " + myPlayer.VideoEnable
+ "\r\nConnectType: " + myPlayer.ConnectType
+ "\r\Password: " + myPlayer.Password
);

</script>

</body>
</html>
下面是桌面程序,用VC调用
[code=C/C++]
CAvplayerctrl *m_pPlayer = new CAvplayerctrl;
CRect rc(10, 10, 1024, 768);
BOOL bRet = m_pPlayer->Create(NULL, WS_BORDER, rc, this, -1);
bRet = m_pPlayer->ShowWindow(SW_SHOW);

m_pPlayer->SetSvrType(3);
CString strIP;
GetDlgItem(IDC_EDIT_IP)->GetWindowText(strIP);
//strIP.Format("%s", "172.30.33.57");
m_pPlayer->SetSmgAddress(strIP);
m_pPlayer->SetSmgPort(5834);
m_pPlayer->SetTextOut2("EVIP WEB");
CString cgiStr;
int cameraID = 0;
CString strID;
GetDlgItem(IDC_EDIT_CAMERAID)->GetWindowText(strID);
cameraID = atoi(strID.GetBuffer());
cgiStr.Format("GET /CameraID=%d&Type=zyh264 HTTP/1.0\r\n\r\n", cameraID);
m_pPlayer->SetCGIString(cgiStr);
m_pPlayer->SetConnectType(0);
m_pPlayer->SetVideoEnable(TRUE);
m_pPlayer->SetIsSetBmp2(1);

ShowWindow(SW_MAXIMIZE);


[/code]
jerry0814 2010-01-08
  • 打赏
  • 举报
回复
学习

3,245

社区成员

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

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