簡體   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