我创建了一个简单类很少的.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中创建一个对象并在命令提示符下运行脚本时,我得到的不是对象或null。
JS代码:
var testObj = new ActiveXObject(MyTestDLL.Core.PacketInfo);
testObj.HostName = "Test";

有人可以告诉我如何解决这个问题吗?
答案 0 :(得分:1)
您需要在课程中添加ProgId attribute,如下所示:
[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";
答案 1 :(得分:-2)
我能够通过在我们的DLL上面添加以下行来实现这一点,
[Guid("A32AB771-9967-4604-B193-57FAA25557D4"), ClassInterface(ClassInterfaceType.None)]
早些时候,我的代码中没有ClassInterfaceType部分。 还要确保每个类都具有唯一的GUID。 仅供参考:您可以使用Visual Studio工具GUID创建器GUI创建GUID。