Невозможно вызвать сервис .Net из C ++ - PullRequest
0 голосов
/ 06 июня 2011

Я написал службу 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.

У кого-нибудь есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 июня 2011

Возможно, это поможет.Выглядит намного сложнее, чем я бы предположил:)

Создание службы WCF для неуправляемых клиентов C ++

удачи

0 голосов
/ 06 июня 2011

Вы установили свой проект C # для регистрации COM-взаимодействия в настройках сборки проекта? Либо, либо вам нужно запустить regasm для ручной регистрации .NET DLL в COM.

...