Я написал службу Windows .NET, в которую встроена служба WCF. Я могу вызвать это из клиента C #, написанного в Visual Studio 2010. Однако мне также нужно вызвать его из приложения MFC, написанного в Visual Studio 6. Я добавил код 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. то есть класс не зарегистрирован. Чего мне не хватает?
UPDATE:
Я добавил ComVisible (true) в строку Guid на интерфейсе и добавил опцию / codebase к вызову regasm. Теперь из приложения MFC CreateInstance завершается успешно, но вызов AddFile ничего не делает. Там нет ошибки, но метод не вызывается. Я знаю это, потому что у меня есть вход в метод. Этот метод отлично работает с клиентом C # .NET.
Итак, я все ближе, но теперь не понимаю, почему вызов метода не создает ошибку и еще не вызывает мой сервис .NET.
У кого-нибудь есть идеи?