具有VB6/asp错误的C#COM对象 [英] C# COM objects with VB6/asp error
问题描述
我正在尝试通过COM公开C#类库,以便可以在经典的ASP网站中使用它.
I'm trying to expose a C# class library via COM so that I can use it in a classic asp web site.
我使用过sn-k,regasm和gacutil.我现在所能做的就是回显字符串.
I've used sn - k, regasm and gacutil. About all I can do now though is echo back strings.
以Class变量作为输入的方法对我不起作用.即我的测试方法EchoPerson(Person p)返回名字和姓氏的字符串不起作用.我收到运行时错误5-无效的过程调用或参数.
Methods which take Class variables as input are not working for me. ie my test method EchoPerson(Person p) which returns a string of the first and last name doesn't work. I get a runtime error 5 - Invalid procedure call or argument.
请让我知道我在想什么.另外,我在VB中没有智慧.我需要做些什么才能使智能发挥作用.
Please let me know what I am missing. Also I have no intellisence in VB. What do I need to do to get the intellisence working.
下面是我的C#测试代码
Below is my C# test code
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
推荐答案
以下是您应考虑使用的模式:-
Here is the pattern you should consider using:-
[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客户端使用.
This approach gives you much more control over the COM Interface exposed by the .NET components. Only the members defined by interface are exposed for consumption by COM clients.
这篇关于具有VB6/asp错误的C#COM对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!