Ошибка Интерфейса Com

Тема в разделе "Delphi - СОМ", создана пользователем regggie, 13 фев 2012.

  1. regggie

    regggie Гость

    Здравствуйте! Помогите мне, пожалуйста, разобраться в моей проблеме. Я создаю клиент-серверное приложение на основе COM объектов. Оба приложения запускаются, но когда я нажимаю кнопку соединения на клиенте, выскакивает ошибка "Интерфейс не поддерживается". До этого выскакивало что-то вроде "Ошибка реестра OLE". Я отключила контроль учетных записей, она пропала. Не знаю, может не надо было отключать. Подскажите, пожалуйста, если кто-то в этом разбирается. Скорее всего, проблема не в коде, но на всякий случай.

    Код для клиента:
    Код (C++):
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <comobj.hpp>
    #include <windows.h>
    #define MAX_COMPUTERNAME_LENGTH 30
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    double* res;
    double a;
    double b;
    Variant com_obj1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::N1Click(TObject *Sender)
    {
    char buffer[MAX_COMPUTERNAME_LENGTH+1];  //возвращает NetBios имя компьютера
    DWORD size;
    size=sizeof(buffer);
    GetComputerName(buffer,&size);
    com_obj1 = CreateOleObject("Project2.com_obj1");
    com_obj1.OleProcedure("Login",buffer);
    res = new double;
    }
    Код для сервера
    Код (C++):
    // COM_OBJ1IMPL : Implementation of Tcom_obj1Impl (CoClass: com_obj1, Interface: Icom_obj1)
    #include <vcl.h>
    #pragma hdrstop
    #include "COM_OBJ1IMPL.H"
    #include "Unit1.h"
    TDateTime ttime;
    /////////////////////////////////////////////////////////////////////////////
    // Tcom_obj1Impl
    STDMETHODIMP Tcom_obj1Impl::Login(BSTR name)
    {
    ttime= ttime.CurrentDateTime();
    Form1->Memo1->Lines->Add(TimeToStr(ttime)+": Клиент "+name+" подключен");
    return S_OK;
    }
     
  2. regggie

    regggie Гость

    Возможно, я нашла то, с чем может быть связана моя ошибка, в файле com_obj1Impl.h:
    Код (C++):
    ////////////////////////////////////////////////////////////////////////////
    // Tcom_obj1Impl     Implements Icom_obj1, default interface of com_obj1
    // ThreadingModel : Free
    // Dual Interface : FALSE    //вот эта строка
    // Event Support : FALSE
    // Default ProgID : Project1.com_obj1
    // Description  :
    /////////////////////////////////////////////////////////////////////////////
    А как сделать, чтобы Dual Interface равнялось True? Где задается этот параметр? Я при создании объекта его не видела.

    И ещё, я попыталась заново переделать сервер с COM объектом. Почему-то теперь при создании объекта пункт меню Run->Register ActiveX Server не активен. Хотя файл с расширением .tlb создается. В чем может быть причина?
     
  3. YURYS

    YURYS Гость

    http://krsk.citymebel.ru/
    В нашем интернет-магазине может быть куплена офисная мебель в Красноярске, выполненная из разных материалов. Предлагаются шкафы, столы, стеллажи, производство которых ведется по современным технологиям. Всегда можно выбрать недорогие изделия с отделкой из пластика, стекла, дерева.
     
Загрузка...
Похожие Темы - Ошибка Интерфейса Com
  1. ildareshka
    Ответов:
    3
    Просмотров:
    27
  2. Ruska132
    Ответов:
    1
    Просмотров:
    67
  3. Lamerman
    Ответов:
    0
    Просмотров:
    47
  4. Enima
    Ответов:
    0
    Просмотров:
    63
  5. Baindt
    Ответов:
    1
    Просмотров:
    89

Поделиться этой страницей