好吧,我要疯了。我一直在尝试使一个简单的.net 程序集可见以用作 COM 对象,但它不起作用。我一直在尝试很多不同的方法,但都没有奏效。到目前为止,我得到的最接近的是属性、接口、手动注册等最少的那个。
我有一个 vbscript 作为测试,如下所示:
Dim o
o = CreateObject("MyNamespace.MyClass")
msgbox o.Test()
我的 c# 代码如下所示:
using System;
using System.Runtime.InteropServices;
namespace MyNamespace
{
[ProgId("MyNamespace.MyClass")]
public class MyClass
{
public string Test()
{
return "teststring";
}
}
}
在我的项目(VS2008)上,我选择了“使程序集 COM 可见”——它向我的 AssemblyInfo.cs 添加了一个属性,我还检查了“注册 COM 互操作”。
我可以看到 ProgId 真的没有什么区别(无论如何在我的情况下) - 只要我指定真正的名称空间+类名,我可以覆盖它,我认为这很好。
问题是 - 我的 CreateObject 运行良好,但找不到方法 Test()。事实上,如果我使用 dll 并提取 tlb 并期望我根本看不到任何方法。
我得到的错误是这样的:
C:\inetpub\wwwroot\ASPTest\testrun.vbs(3, 1) Microsoft VBScript 运行时错误:对象不支持此属性或方法:“测试”
我很想得到任何反馈,但只是为了让你知道我一直在尝试什么。我在类上搞乱了 Guid 和 AttributeGuid,在类上明确定义了 COMVisible,我尝试不注册 COM 互操作,而是做了 regasm /codebase /regfile。
最后一点-我的大多数测试都围绕未签名的程序集展开,但试图查明我尝试使用强名称/密钥的错误,但它没有做任何事情。
谁能帮我找出问题,好吗?