gpt4 book ai didi

带有 VB6/asp 错误的 C# COM 对象

转载 作者:行者123 更新时间:2023-11-30 21:21:20 25 4
gpt4 key购买 nike

我正在尝试通过 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 接口(interface)。只有接口(interface)定义的成员才会公开供 COM 客户端使用。

关于带有 VB6/asp 错误的 C# COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2791996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com