Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

#import или как использовать com-объекти в VC++6.0

538
20 января 2008 года
AVDEY
188 / / 17.11.2005
Помогите разобраться с использованием директивы #import.
В нете нашел описание которое на всех сайтах почти одинаковое. http://www.sources.ru/cpp/cpp_pragma_import.shtml.
 
Код:
#include "stdafx.h"
#import "ATL_TEST2.dll"
int main(int argc, char* argv[])
{
    printf("Hello World!\n");
    return 0;
}

Далее после компиляции создается 2 файла
ATL_TEST2.tlh
Код:
// Created by Microsoft (R) C/C++ Compiler Version 12.00.8168.0 (9c0a07bf).
//
// f:\myprojects\testcom\debug\ATL_TEST2.tlh
//
// C++ source equivalent of Win32 type library ATL_TEST2.dll
// compiler-generated file created 01/20/08 at 13:21:12 - DO NOT EDIT!

#pragma once
#pragma pack(push, 8)

#include <comdef.h>

namespace ATL_TEST2Lib {

//
// Forward references and typedefs
//

struct __declspec(uuid("54a0bf53-ab95-4387-8270-8657f8c0f3c4"))
/* dispinterface */ _IFerstAtlEvents;
struct /* coclass */ FerstAtl;
struct __declspec(uuid("bc6abfee-60c8-467e-a6bd-37d2e13c34c7"))
/* dual interface */ IFerstAtl;

//
// Smart pointer typedef declarations
//

_COM_SMARTPTR_TYPEDEF(_IFerstAtlEvents, __uuidof(IDispatch));
_COM_SMARTPTR_TYPEDEF(IFerstAtl, __uuidof(IFerstAtl));

//
// Type library items
//

struct __declspec(uuid("54a0bf53-ab95-4387-8270-8657f8c0f3c4"))
_IFerstAtlEvents : IDispatch
{};

struct __declspec(uuid("3ae7cf4c-6700-4b38-b54d-f8ea04d49857"))
FerstAtl;
    // [ default ] interface IFerstAtl
    // [ default, source ] dispinterface _IFerstAtlEvents

struct __declspec(uuid("bc6abfee-60c8-467e-a6bd-37d2e13c34c7"))
IFerstAtl : IDispatch
{
    //
    // Property data
    //

    __declspec(property(get=GetGetVar))
    _variant_t GetVar;
    __declspec(property(get=GetGetInc))
    short GetInc;

    //
    // Wrapper methods for error-handling
    //

    HRESULT Method (
        const _variant_t & Var );
    _variant_t GetGetVar ( );
    HRESULT Inc (
        short a );
    short GetGetInc ( );

    //
    // Raw methods provided by interface
    //

    virtual HRESULT __stdcall raw_Method (
        VARIANT Var ) = 0;
    virtual HRESULT __stdcall get_GetVar (
        VARIANT * pVal ) = 0;
    virtual HRESULT __stdcall raw_Inc (
        short a ) = 0;
    virtual HRESULT __stdcall get_GetInc (
        short * pVal ) = 0;
};

//
// Wrapper method implementations
//

#include "f:\myprojects\testcom\debug\ATL_TEST2.tli"

} // namespace ATL_TEST2Lib

#pragma pack(pop)

и ATL_TEST2.tli
Код:
// Created by Microsoft (R) C/C++ Compiler Version 12.00.8168.0 (9c0a07bf).
//
// f:\myprojects\testcom\debug\ATL_TEST2.tli
//
// Wrapper implementations for Win32 type library ATL_TEST2.dll
// compiler-generated file created 01/20/08 at 13:21:12 - DO NOT EDIT!

#pragma once

//
// interface IFerstAtl wrapper method implementations
//

inline HRESULT IFerstAtl::Method ( const _variant_t & Var ) {
    HRESULT _hr = raw_Method(Var);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr;
}

inline _variant_t IFerstAtl::GetGetVar ( ) {
    VARIANT _result;
    VariantInit(&_result);
    HRESULT _hr = get_GetVar(&_result);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _variant_t(_result, false);
}

inline HRESULT IFerstAtl::Inc ( short a ) {
    HRESULT _hr = raw_Inc(a);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr;
}

inline short IFerstAtl::GetGetInc ( ) {
    short _result;
    HRESULT _hr = get_GetInc(&_result);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _result;
}

Как мне вызвать один из методов интерфейса IFerstAtl?
1.8K
21 января 2008 года
_const_
229 / / 26.11.2003
Код:
#include "stdafx.h"
#include "ATL_TEST2.tlh"

int _tmain(int argc, _TCHAR* argv[])
{
    ::CoInitialize(NULL);
    ATL_TEST2Lib::IFerstAtlPtr ptr;
    HRESULT hRes = adr.CreateInstance(clsID);//свой CLSID
    if (FAILED(hRes))
        return 0;
             ptr->//свой метод
             ptr.Release();
    ::CoUninitialize();
    return 0;
}
538
21 января 2008 года
AVDEY
188 / / 17.11.2005
Спасибо все получилось. Но здесь:
HRESULT hRes = adr.CreateInstance(clsID);//свой CLSID
наверное вместо adr надо ptr.
1.8K
22 января 2008 года
_const_
229 / / 26.11.2003
Цитата: AVDEY
Спасибо все получилось. Но здесь:
HRESULT hRes = adr.CreateInstance(clsID);//свой CLSID
наверное вместо adr надо ptr.



Разумеется. Опечатка вышла.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог