2011-10-10 56 views
4

我不能在C#创建ActiveX控制器,试过很多教程创建ActiveX ..如何在C#

我的步骤: 1.创建类库项目 2.编写代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 
using System.Text; 
using System.Reflection; 
using Microsoft.Win32; 
using System.Windows.Forms; 

namespace AACWCSurvey 
{ 
    [ProgId("Prisoner.PrisonerControl")] 
    [ClassInterface(ClassInterfaceType.AutoDual)] 
    public class Class1 
    { 
     public Class1() 
     { 
      MessageBox.Show("FIRETRUCK!!!"); 
     } 
    } 
} 
  1. 属性=>应用程序=>程序集信息=>请大会COM可见
  2. 构建=>注册为COM Interop True(选中)
  3. 做出assemply(签名)强名称
  4. 生成项目
  5. regasm MYDLL.DLL/TLB /代码库

  6. 无法看到Prisoner.PrisonerControl在tstcon32 =(

需要帮助 谢谢

UPD:工作如VB脚本:

Dim objJava 
Set objJava = WScript.CreateObject("Prisoner.PrisonerControl") 

,但它不是在tstcon32,为什么...

UPD2可见:也许是因为tstcon32只为控制?

+1

通灵调试:您位于x64系统上,tstcon32是32位进程,用于在注册表的WOW64部分中搜索activeX对象。 –

+0

@VirtualBlackFox,谢谢,但是我的操作系统是WinXP x86 =( – VextoR

+0

)打开注册表编辑器,在HKEY_CLASSES_ROOT下查找包含你的progid的文件夹“Prisoner.PrisonerControl”,如果有,那么抓住该键下面的CLSID值。现在,查看该CLSID的较早的HKEY_CLASSES_ROOT/CLSID。假设找到了,那么请在InprocServer32下查看,它应该有用于您的程序集的路径,版本,ID等。如果所有这些都看起来不错,那么该程序集已经成功注册为com对象。 – user957902

回答

2

我认为您的更新2是正确的,如果您使用Prisoner.PrisonerControl控件读取the actual article,则使用您的控件GUID在密钥内创建一个名为Control的子密钥。

在我的机器用GUID {9DEA5F06-E324-31A7-837B-D0F3BDE91423}创建键

HKEY_CLASSES_ROOT\CLSID\{9DEA5F06-E324-31A7-837B-D0F3BDE91423}\Control 

使控制出现在tstcon32。带或不带它的ActiveX是JavaScript可用

var x = new ActiveXControl("Prisoner.PrisonerControl"); 

其实我只好打两个JavaScript执行和注册表路径上的窗口,以测试它在我的系统,因为它是在x64机器但那是另一故事。

+0

谢谢!那么,所以我需要手动创建它,不好:)即使在Java中它也更容易:) – VextoR

1

您已创建COM服务器。一个ActiveX控件,你可以用tstcon32.exe进行练习的类型是一个更加复杂的COM对象。它必须实现一堆接口,关键的接口是IOleObject和IOleWindow。这种接口允许它与ActiveX主机进行所需的协商并创建一个可见的窗口。 Winforms控件类是您创建一个最好的选择。

+0

谢谢,我会尝试它! – VextoR

+0

它正在工作))) – VextoR