我正在尝试通过 COM 公开 C# 类库,以便我可以在经典的 ASP 网站中使用它。
我用过 sn - k、regasm 和 gacutil。我现在能做的就是回显字符串。
以类变量作为输入的方法对我不起作用。即我的测试方法 EchoPerson(Person p) 返回名字和姓氏的字符串不起作用。我收到运行时错误 5 - 无效的过程调用或参数。
请让我知道我缺少什么。而且我在 VB 中没有智能感知。我需要做什么才能让智能感知正常工作。
下面是我的C#测试代码
namespace MrdcToFastCom
{
public class Person : MrdcToFastCom.IPerson
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class ComTester : MrdcToFastCom.IComTester
{
public string EchoString(string s)
{
return ("Echo: " + s);
}
public string Hello()
{
return "Hello";
}
public string EchoPerson(ref Person p)
{
return string.Format("{0} {1}", p.FirstName, p.LastName);
}
}
}
和VB6调用
Private Sub btnClickMe_Click()
Dim ct
Set ct = New MrdcToFastCom.ComTester
Dim p
Set p = New MrdcToFastCom.Person
p.FirstName = "Joe"
p.LastName = "Test"
Dim s
s = ct.EchoPerson(p) ''#Error on this line
tbx1.Text = s
End Sub
这是您应该考虑使用的模式:-
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("B4CAC74B-ADE0-4ac7-AD0E-26E6439F9CF7")]
public interface _IPerson
{
string FirstName { get; set; }
string LastName { get; set; }
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("A3C553DC-A348-43e4-957A-F94D23E3300E")]
public class Person : _IPerson
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[Guid("4B527235-6738-4853-BEA0-FB3087C89291")]
public interface _ComTester
{
string EchoPerson(Person person);
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("C753D72B-C802-44ae-946A-E3F6D7C5D14B")]
public class ComTester : _ComTester
{
public string EchoPerson(Person person)
{
return person.FirstName + " " + person.LastName;
}
}
这种方法使您可以更好地控制 .NET 组件公开的 COM 接口。仅公开由接口定义的成员以供 COM 客户端使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)