【发布时间】:2011-06-06 10:27:15
【问题描述】:
我编写了一个 .NET Windows 服务,其中内置了 WCF 服务。我可以从用 Visual Studio 2010 编写的 C# 客户端调用它。但是,我还需要从用 Visual Studio 6 编写的 MFC 应用程序调用它。我添加了 COM 互操作代码来尝试实现这一点,创建了一个 snk 文件,使用regasm 注册并安装它。
WCF 服务和 MFC 应用都是 32 位的。
我的 WCF 服务接口代码如下所示
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IGASR" in both code and config file together.
[Guid("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")]
[ServiceContract]
public interface IMyClass
{
[OperationContract]
void AddFile(string sFilename);
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)]
public class MyClass : IMyClass
{
public void AddFile(string sFilename)
{
...
}
}
我的 MFC 代码如下所示:
CoInitialize(NULL);
MyNamespace::IMyClassPtr pDotNetCOMPtr;
HRESULT hRes =
pDotNetCOMPtr.CreateInstance(MyNamespace::CLSID_MyClass);
if (hRes == S_OK)
{
pDotNetCOMPtr->AddFile ( _bstr_t(m_strFilename));
}
CoUninitialize (); //DeInitialize all COM Components
但是,CreateInstance 失败,HRESULT 为 -2147221164。即该课程未注册。我错过了什么?
更新: 我将 ComVisible(true) 添加到界面上的 Guid 行,并将 /codebase 选项添加到 regasm 调用。现在,从 MFC 应用程序中,CreateInstance 成功,但对 AddFile 的调用没有执行任何操作。没有错误,但没有调用该方法。我知道这一点,因为我已经登录了该方法。此方法适用于 C# .NET 客户端。
所以,我越来越近了,但现在不明白为什么方法调用没有产生错误,但没有调用我的 .NET 服务。
有人有什么想法吗?
【问题讨论】: