如何创建要在 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。
我用一些简单的东西创建了一个 .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。