- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我有以下用于将事件 x 组件配置为的 c# 代码
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using Microsoft.Win32;
namespace Kosmala.Michal.ActiveXTest
{
/// <summary>
/// Summary description for Class1.
/// </summary>
[ProgId("Dendrite.WebForce.MMP.Web.OurActiveX")]
[ClassInterface(ClassInterfaceType.AutoDual), ComSourceInterfaces(typeof(ControlEvents))] //Implementing interface that will be visible from JS
[Guid("121C3E0E-DC6E-45dc-952B-A6617F0FAA32")]
[ComVisible(true)]
public class ActiveXObject
{
private string myParam = "Empty";
public ActiveXObject()
{
}
public event ControlEventHandler OnClose;
/// <summary>
/// Opens application. Called from JS
/// </summary>
[ComVisible(true)]
public void Open()
{
//TODO: Replace the try catch in aspx with try catch below. The problem is that js OnClose does not register.
try
{
MessageBox.Show(myParam); //Show param that was passed from JS
Thread.Sleep(2000); //Wait a little before closing. This is just to show the gap between calling OnClose event.
Close(); //Close application
}
catch (Exception e)
{
//ExceptionHandling.AppException(e);
throw e;
}
}
/// <summary>
/// Parameter visible from JS
/// </summary>
[ComVisible(true)]
public string MyParam
{
get
{
return myParam;
}
set
{
myParam = value;
}
}
[ComVisible(true)]
public void Close()
{
if(OnClose != null)
{
OnClose("http://otherwebsite.com"); //Calling event that will be catched in JS
}
else
{
MessageBox.Show("No Event Attached"); //If no events are attached send message.
}
}
/// <summary>
/// Register the class as a control and set it's CodeBase entry
/// </summary>
/// <param name="key">The registry key of the control</param>
[ComRegisterFunction()]
public static void RegisterClass ( string key )
{
// Strip off HKEY_CLASSES_ROOT\ from the passed key as I don't need it
StringBuilder sb = new StringBuilder ( key ) ;
sb.Replace(@"HKEY_CLASSES_ROOT\","") ;
// Open the CLSID\{guid} key for write access
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(),true);
// And create the 'Control' key - this allows it to show up in
// the ActiveX control container
RegistryKey ctrl = k.CreateSubKey ( "Control" ) ;
ctrl.Close ( ) ;
// Next create the CodeBase entry - needed if not string named and GACced.
RegistryKey inprocServer32 = k.OpenSubKey ( "InprocServer32" , true ) ;
inprocServer32.SetValue ( "CodeBase" , Assembly.GetExecutingAssembly().CodeBase ) ;
inprocServer32.Close ( ) ;
// Finally close the main key
k.Close ( ) ;
MessageBox.Show("Registered");
}
/// <summary>
/// Called to unregister the control
/// </summary>
/// <param name="key">Tke registry key</param>
[ComUnregisterFunction()]
public static void UnregisterClass ( string key )
{
StringBuilder sb = new StringBuilder ( key ) ;
sb.Replace(@"HKEY_CLASSES_ROOT\","") ;
// Open HKCR\CLSID\{guid} for write access
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(),true);
// Delete the 'Control' key, but don't throw an exception if it does not exist
k.DeleteSubKey ( "Control" , false ) ;
// Next open up InprocServer32
//RegistryKey inprocServer32 =
k.OpenSubKey ( "InprocServer32" , true ) ;
// And delete the CodeBase key, again not throwing if missing
k.DeleteSubKey ( "CodeBase" , false ) ;
// Finally close the main key
k.Close ( ) ;
MessageBox.Show("UnRegistered");
}
}
/// <summary>
/// Event handler for events that will be visible from JavaScript
/// </summary>
public delegate void ControlEventHandler(string redirectUrl);
/// <summary>
/// This interface shows events to javascript
/// </summary>
[Guid("68BD4E0D-D7BC-4cf6-BEB7-CAB950161E79")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ControlEvents
{
//Add a DispIdAttribute to any members in the source interface to specify the COM DispId.
[DispId(0x60020001)]
void OnClose(string redirectUrl); //This method will be visible from JS
}
}
并且我创建了 testpage .html 作为
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name=vs_defaultClientScript content="JavaScript">
<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
</head>
<body onload="OpenActiveX()">
<!-- Our activeX object -->
<OBJECT id="OurActiveX" name=”OurActiveX" classid="clsid:121C3E0E-DC6E-45dc-952B-A6617F0FAA32" VIEWASTEXT codebase="OurActiveX.cab"></OBJECT>
<!-- Attaching to an ActiveX event-->
<script language="javascript">
function OurActiveX::OnClose(redirectionUrl)
{
alert(redirectionUrl); <!-- http://otherwebsite.com should be returned-->
//window.location = redirectionUrl;
}
</script>
<script language="javascript">
//Passing parameters to ActiveX object and starting application
function OpenActiveX()
{
try
{
document.OurActiveX.MyParam = "Hi I am here." //Passing parameter to the ActiveX
document.OurActiveX.Open(); //Running method from activeX
}
catch(Err)
{
alert(Err.description);
}
}
</script>
</body>
</html>
现在,当我在 Internet Explorer 浏览器中运行 html 页面时,出现以下错误
对象不支持属性或方法打开
你能帮我解决这些问题吗
等待您宝贵的意见和回复
最佳答案
您必须使用以下方式注册您的 ActiveX 控件Microsoft .Net Framework regasm.exe 工具。
要注册您的 ActiveX 控件,请使用以下步骤:
输入以下命令
regasm.exe/tlb/codebase “您的 ActiveX.dll 的路径”
请注意,如果您运行的是 x64 位操作系统您必须为 x86 和 x64 注册您的 ActiveX 控件IE浏览器。对于 x64 Internet Explorer,您必须导航到您定位的 .Net Framework 的 x64 目录和执行以下命令:
regasm.exe/tlb/codebase “你的 x64 ActiveX.dll 的路径”
在您的 ActiveX dll 注册过程中,您应该会看到一个消息框消息“已注册”。请不要,如果你用平台目标“任何CPU”编译你的dll您可以使用相同的 dll 进行注册。
关于c# - 使用 c# 运行带有 activex 对象的 dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749921/
我创建了一个安装在客户端计算机上的 ActiveX 控件。现在我已经在 ActiveX 控件中进行了一些更改,现在希望更改的 ActiveX 应该在客户端计算机中自动更新。 我已将安装文件的版本从 1
我用 C# 创建了一个 com 组件,并使用 Regasm 注册了该组件。我现在可以通过使用 ActiveXObject(...) 在 IE 中使用它。然而,这只在我更改 IE 安全设置并允许运行
我以前做过,但我完全忘记了如何签署 activeX 控件? 最佳答案 Digital Signing for ActiveX Components (MSDN) 关于activex - 签署 Acti
我有一个多页网页流 (jsp)。用户完成大量工作后,我需要使用 activex 组件,如果机器上没有显示,用户会在顶部显示黄色条以接受组件,接受后页面将重新加载,用户必须重复所有操作工作,请注意页面已
背景 有一个由 VB 创建的旧 ActiveX 控件。我将此 ActiveX 控件添加到我的 Excel 工作簿并设置了一些属性。这些属性是在保存书籍时保存的。具体来说,它们在 VB 代码中使用 Pr
我有一个想要从 SAP 调用的自定义 ActiveX 控件。 在这种情况下我不能使用 PI,我还有什么其他选择? 最佳答案 看节目 SAPRDEMO_ACTIVEX_INTEGRATION 举个例子。
我的 .NET 程序中有 WebBrowser 控件。实际上使用哪个 .net 包装器(wpf 或 winforms)并不重要,因为它们都包装 ActiveX 组件“Microsoft Interne
我有一个正在注册多个 dll 的安装程序,需要知道这是否成功。 最佳答案 这似乎对我有用:http://www.nirsoft.net/utils/registered_dll_view.html 关
如何将 ActiveX 应用程序转换为 NPAPI 应用程序? 我找到的所有方法都是为 NPAPI 实现入口点和映射函数。 (NPP_GetEntryPoints...)除了使用 Framework
“ActiveX 控件——小程序构建 block ——可以用于创建分布式应用程序,这些应用程序可以通过 Web 浏览器在 Internet 上运行。示例包括用于收集数据、查看某些类型的文件和显示动画的
微软发布了 Edge 浏览器,该浏览器不支持 ActiveX。 我有一个应用程序需要从 Windows 注册表获取信息,因此我对 ActiveX 的替代方案有一些疑问: 有没有办法通过 Edge 或类
我正在使用现有的 SDK 编写一个附加组件,该 SDK 没有类似 webview 的组件,但允许使用 ActiveX 控件。 所以我想到的唯一想法是找到一个实现网络浏览器的 ActiveX 控件,或者
嗨,我有一个这样的 ActiveX: CMyActiveX 类: 公共(public) CComObjectRootEx... ... { HRESULT FinalContruct(){return
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
我有一个放置在 IE 浏览器容器中的 ActiveX 控件。该控件创建另一个启用了 WS_POPUP 和 WS_LAYERED 属性的对话框窗口,以便能够使用 SetLayeredWindowAttr
几天前,我在 Internet Explorer 中搜索了一种无需打印对话框直接打印的方法,并找到了这个 solution . 在此解决方案中,使用 ActiveX 对象“Shell.Explorer
我在服务器端使用 ASP.NET,在客户端使用 JavaScript。 我正在尝试开发一些有助于用户进行故障排除的页面,我想知道是否有一种方法可以通过编程方式确定以下内容: 如果 ActiveX 在
在 Visual Studio 2008 中,我可以创建一个 MFC activex 项目,它提供了一个向导来创建单个 activex 控件。我现在想在这个项目中创建新控件。 我找不到任何方法来做到这
我正在尝试为一个简单的 hello world 消息框运行 activex 控件。 首先,我创建了类库,现在有了 dll,然后我创建了 HTML 页面并调用了 activeX 控件:
免责声明:我没有签署文件的经验,这是我第一次。 我们的网站有一个通配符 SSL 证书。现在我们要在我们的一个站点上托管一个 ActiveX 控件。当我尝试使用该证书对我的 cab 文件进行签名时,它会
我是一名优秀的程序员,十分优秀!