如何创建要在 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。 // [程序集:ComVisible(true)]

但是,当我在 JavaScript 和 运行 命令提示符中的脚本中使用它创建一个对象时,我得到的不是它不是对象就是 null。

JS 代码:

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

谁能告诉我如何解决这个问题?

您需要在 class 中添加一个 ProgId attribute,如下所示:

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

guid是可选的,但是如果不自己设置的话,就不是自己能控制的了,还是自己定义好吧。当然,我没有添加 ComVisible,因为您已经在程序集级别定义了它(我个人更喜欢将其设置为 class 级别)。

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

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

我可以通过在 class、

上方的我的 DLL 中添加以下行来实现这一点
 [Guid("A32AB771-9967-4604-B193-57FAA25557D4"), ClassInterface(ClassInterfaceType.None)] 

早些时候我的代码中没有 ClassInterfaceType 部分。 还要确保每个 classes 都具有唯一的 GUID。 仅供参考:您可以使用 Visual Studio 工具 GUID 创建器 GUI 创建 GUID。