• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы regggie
  • Дата начала
R

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;
}
 
R

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 создается. В чем может быть причина?
 
Y

YURYS


В нашем интернет-магазине может быть куплена офисная мебель в Красноярске, выполненная из разных материалов. Предлагаются шкафы, столы, стеллажи, производство которых ведется по современным технологиям. Всегда можно выбрать недорогие изделия с отделкой из пластика, стекла, дерева.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!