Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ole Object


Автор: Temnozor 28.10.2002, 17:24
Мне надо написать программу на Си, использующей драйвер одной железки, прицепленной к COM-порту. Но все примеры приведены для Delphi. Подскажите, какую фунцию мне использовать вместо Delphi'иской CreateOleObject(). Выдержки из примера:
Код

var
 AX: OleVariant;

...

 AX:= CreateOleObject('SamAll.SamAll3');

...

procedure TMainForm.ReportButtonClick(Sender: TObject);
var
 Err: integer;
begin
 DisableButtons;
 try
   Report.Lines.Clear;
   AX.ReportType:= ReportType.ItemIndex+9;
   AX.ShowProgress:= ShowProgress.Checked;
   Err:= AX.BeginReport;
   while Err=0 do
     begin
     Err:= AX.GetRecord;
     if Err=0 then
       Report.Lines.Add(AX.Caption);
     end;
   AX.EndReport;
 finally
   ErrorNumber.Text:= inttostr(AX.ResultCode);
   ErrorText.Text:= AX.ResultDescription;
   EnableButtons;
 end;
end;

Автор: podval 28.10.2002, 20:35
Пиши в Билдере и используй ту же функцию

Автор: Temnozor 28.10.2002, 21:30
Я уже разобрался. CreateControl.
А вообще, в VC есть средство создания класса прямо из файла (в моем случае dll, но можно ocx и др.). Причем создается класс со всеми методами и свойствами объекта. Так что проблем не возникло.
Вот часть того, что сгенерил Wizard:
Код

class CSamAll3 : public CWnd
{
protected:
DECLARE_DYNCREATE(CSamAll3)
public:
CLSID const& GetClsid()
{
static CLSID const clsid
= { 0x2AE09006, 0x7261, 0x11D2, { 0x8D, 0x28, 0x0, 0x0, 0xE8, 0xDC, 0x54, 0xD2 } };
return clsid;
}
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL)
{
return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);
}

...

void put_DeviceEnabled(BOOL newValue)
{
static BYTE parms[] = VTS_BOOL;
InvokeHelper(0x6, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, newValue);
}
CString get_DeviceDescription()
{
CString result;
InvokeHelper(0x1b, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
return result;
}

...


long EndReport()
{
long result;
InvokeHelper(0x27, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
return result;
}
long SetCaption()
{
long result;
InvokeHelper(0x2c, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
return result;
}
long SetValue()
{
long result;
InvokeHelper(0x48, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
return result;
}
...
};

Автор: Fantasist 29.10.2002, 01:56
Цитата(Temnozor @ 28.10.2002, 13:30)
А вообще, в VC есть средство создания класса прямо из файла (в моем случае dll, но можно ocx и др.).

Такое средство есть практически во всех средах разработки.  :)
Обобщенно называемое импортом библиотеки типов. Только это не то же самое, что CreateOleObject - с помощью этой функции ты можешь создать объект не имея его библиотеки типов.

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