繁体   English   中英

如何创建在JavaScript中使用的C#.Net DLL

[英]How to create an C#.Net DLL to use in JavaScript

我用几个简单的类创建了一个.Net DLL。 我已经使用RegAsm注册了DLL,并且收到一条消息,指出类型已成功注册。

使用的RegAsm语法:

C:\\ Windows \\ Microsoft.NET \\ Framework \\ v4.0.30319> RegAsm.exe“ D:\\ Projects \\ TestDLL.Core.dll”

C#代码:

namespace MyTestDLL.Core    
    {  
        public class PacketInfo    
        {    
          // constructor
          public PacketInfo()
          {
          }

          public string HostName { get; set; }
            //   and so on ......

        }    
    }

我已将此DLL的AssemblyInfo.cs文件中的ComVisible属性设置为true。 // [assembly:ComVisible(true)]

但是,当我用JavaScript在其中创建对象并在Command提示符下运行脚本时,得到的不是对象还是null。

JS代码:

  var testObj = new ActiveXObject(MyTestDLL.Core.PacketInfo); testObj.HostName = "Test"; 

谁能告诉我该如何解决?

您需要向该类添加ProgId属性 ,如下所示:

[Guid("some guid that you will never change")]
[ProgId("MyLib.PacketInfo")] // this is arbitrary
public class PacketInfo    
{
    ....
}

guid是可选的,但是如果您不自己设置,它将是您无法控制的,因此最好对其进行定义。 当然,我没有添加ComVisible,因为您已经在程序集级别定义了它(我个人更喜欢在类级别设置它)。

然后,一旦注册,您就可以像这样使用它(使用progid作为字符串):

var testObj = new ActiveXObject('MyLib.PacketInfo');
testObj.HostName = "Test";

通过在类上方的My DLL中添加以下行,可以实现这一点,

 [Guid("A32AB771-9967-4604-B193-57FAA25557D4"), ClassInterface(ClassInterfaceType.None)] 

之前,我的代码中没有ClassInterfaceType部分。 还要确保每个类都具有唯一的GUID。 仅供参考:您可以使用Visual Studio Tools GUID Creator GUI创建GUID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM