COM-клиент на билдере:
От: Gajdalager Украина  
Дата: 30.03.05 09:18
Оценка:
Добрый день.
Проблема вот в чем: делаю в MSVC6(Винда у меня 2К) COM-объект через ATL, в нем один мой метод:
interface IInstServFunc : IDispatch
    {
        [id(1), helpstring("method Auth")] HRESULT Auth([in] BSTR, [out, retval] int*);
    };

Реализация простая, просто как пример
STDMETHODIMP CInstServFunc::Auth(BSTR auth_str, int * id)
{
    MessageBox(NULL,  "Hello, World", "", 1);
    *id = 3;
    return S_OK;
}

Собираю, оно регистрируеться, в ОЛЕ Вьювере видно, в реестре тоже.
Запускаю Билдер(6ой), делаю по хелпе:
Project->Import type library, добавляю в палитру компонентов, швыряю на форму... на form create ставлю:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
        InstServFunc1->Connect();
        AnsiString hi = "HI";
        wchar_t* hi_;
        MultiByteToWideChar(CP_ACP, 0, hi.c_str(), hi.Length(), hi_, 0);
        int i;
        i = InstServFunc1->Auth(hi_);
        ShowMessage(IntToStr(i));
        InstServFunc1->Disconnect();
}

Запускаю и... получаю ацесс виолейшн.
что я неправильно делаю и как на билдере писать ком-клиенты?????
Re: COM-клиент на билдере:
От: SergeyL Россия  
Дата: 30.03.05 11:16
Оценка: 2 (1)
Здравствуйте, Gajdalager, Вы писали:

G>Запускаю и... получаю ацесс виолейшн.

G>что я неправильно делаю и как на билдере писать ком-клиенты?????

Можно через палитру, но можно и напрямую:

FormCreate
   OleInitialize(NULL);
   CoCreateInstance(CLSID,
                    NULL,
                    CLSCTX_INPROC_SERVER,
                    IIDIntf,
                    (LPVOID *)&Intf);
...

FormClose
  if(Intf)
    {Intf->Release();
     Intf = NULL;
    }
  OleUninitialize();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.