【问题标题】:COM/ActiveX DLL to consume WCF serviceCOM/ActiveX DLL 使用 WCF 服务
【发布时间】:2018-03-07 08:49:15
【问题描述】:

我正在尝试扩展支持 COM/ActiveX 对象的应用程序。 COM dll 需要向本地网络上的其他系统发送一些数据以进行进一步处理和操作。

我已经测试了一个基本的 WCF 主机客户端设置,它从控制台客户端到控制台主机都可以正常工作。但现在我需要通过客户端在 com-visible dll 中发送数据。

这是dll的代码:

namespace Client
{
[Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]
[ComVisible(true)]
public interface ISend
{
    [DispId(1)]
    bool SendData(string msg);
}
[ClassInterface(ClassInterfaceType.None), Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"), ProgId("Client.Send")]
[ComVisible(true)]
public class Send : ISend
{
    static BasicHttpBinding binding = new BasicHttpBinding();
    static EndpointAddress endpoint = new EndpointAddress(new Uri("http://192.168.1.6:8000/WCFHost/Service/GetData"));

    GetDataClient client = new GetDataClient(binding, endpoint);
    [ComVisible(true)]
    public bool SendData(string msg)
    {       
        try
        {
            if (client.getData(msg))
            {
                client.Close();
                return true;
            }
            else
            {
                client.Close();
                return false;
            }
        }
        catch (Exception e)
        {
            client.Abort();
            return false;
        }
    }
}
} 

该 dll 可以作为参考工作,但无法通过目标应用程序创建对象(它具有访问 COM/ActiveX 对象的功能)。当我尝试通过以下方式访问 dll 时:

obj = CreateObject ("Client.Send");
obj.SendData("Hello")

上面写着:

COM/object handle is null

在第二行仅此而已!

我使用 Remoting 以类似的方式创建了一个 com-visible dll 来实现这一点,它就像一个魅力。但现在它不能作为 WCF 客户端工作。

如果有人能指出我做错了什么,将不胜感激。

我已经转移到远程处理,这不是一个问题,但有人建议我远离它并通过 WCF 实现这一目标。

P.S : 我是 C# 新手,所以请原谅任何愚蠢的错误。

【问题讨论】:

    标签: c# wcf com wcf-client


    【解决方案1】:

    COM 不支持静态方法,有关详细信息,请参阅here。您需要从类中删除 static 关键字,以便让您的客户端创建一个实例。这也将允许您实现接口,这对于静态类是不可能的。

    附带说明,您的代码甚至不应该编译,因为接口上的static 修饰符是非法的。也将其删除,然后重新编译并重新注册您的 DLL。

    【讨论】:

    • 感谢您指出。实际代码没有 static 修饰符。我在发布问题时犯了错误。我已经更新了更改。
    猜你喜欢
    • 2014-10-27
    • 2020-09-10
    • 2013-08-10
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    相关资源
    最近更新 更多