Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > Com - сервер и C#


Автор: m9yt 21.6.2012, 18:35
Привет всем. Изучаю книгу Роджерсона Основы Com. Там создается простейший интерфейс:
Код

#include <InitGuid.h>
interface IX : IUnknown
{
    virtual void pascal Fx() = 0 ;
};

interface IY : IUnknown
{
    virtual void pascal Fy() = 0 ;
};

interface IZ : IUnknown
{
    virtual void pascal Fz() = 0 ;
};

DEFINE_GUID(IID_IX, 0x32bb8320, 0xb41b, 0x11cf, 0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82);
DEFINE_GUID(IID_IY, 0x32bb8321, 0xb41b, 0x11cf, 0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82);
DEFINE_GUID(IID_IZ, 0x32bb8322, 0xb41b, 0x11cf, 0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82);
DEFINE_GUID(CLSID_Component1, 0x0c092c21, 0x882c, 0x11cf, 0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82);

И класс, реализующий эти функции (Реализацию IUnknown опустил):
Код

class CA : public IX, public IY 
{
public:
    // IUnknown
    virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv) ;
    virtual ULONG __stdcall AddRef() ;
    virtual ULONG __stdcall Release() ;

    // Interface IX
    virtual void __stdcall Fx() { cout << "Fx" << endl ;}

    // Interface IY
    virtual void __stdcall Fy() { cout << "Fy" << endl ;} 

    // Constructor
    CA() ;

    // Destructor
    ~CA() ;

private:
    // Reference count
    long m_cRef ;
} ;

Создание dll и регистрацию тоже опущу.
Вот часть клиента:
Код

CoInitialize(NULL);
IX* pIX = NULL ; 
HRESULT hr = ::CoCreateInstance(CLSID_Component1, NULL, CLSCTX_INPROC_SERVER, IID_IX, (void**)&pIX) ;

Ни CoInitialize(NULL), ни CoCreateInstance(...) не видны в C#. Как быть - то? Я хочу использовать свой сервер для вызова функций в клиенте, написанном на C#(графический интерфейс).

Автор: m9yt 22.6.2012, 00:53
Советовали в Project - Add Reference - COM выбрать свой сервер, а далее
Код

using MyComServerNamespace;
MyComServerClass test = new MyComServerClass();

Но проблема, свою библиотеку я там не вижу, хотя она зарегистрирована и видна в OleView.
Пробовал Project - Add Reference - Browse, выбирал свою dll, но ошибка
Please make sure that the files is accessible, and that it is a valid assembly or COM component.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)