M
m9yt
Привет всем. Изучаю книгу Роджерсона Основы Com. Там создается простейший интерфейс:
И класс, реализующий эти функции (Реализацию IUnknown опустил):
Создание dll и регистрацию тоже опущу.
Вот часть клиента:
Ни CoInitialize(NULL), ни CoCreateInstance(...) не видны в C#. Как быть - то? Я хочу использовать свой сервер для вызова функций в клиенте, написанном на C#(графический интерфейс).
C++:
#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);
C++:
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;
};
Вот часть клиента:
C++:
CoInitialize(NULL);
IX* pIX = NULL;
HRESULT hr = ::CoCreateInstance(CLSID_Component1, NULL, CLSCTX_INPROC_SERVER, IID_IX, (void**)&pIX);