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

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

本文关键字:DLL Net JavaScript 一个 何创建 创建      更新时间:2024-05-30

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

使用的RegAsm语法:

C: ''Windows''Microsoft.NET''Framework''v4.0.30119>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。//[汇编:ComVisible(true)]

然而,当我在JavaScript中创建一个对象并在命令提示符下运行该脚本时,我会发现它要么不是对象,要么为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。