#include "stdafx.h"
#import "ATL_TEST2.dll"
int main(int argc, char* argv[])
{
printf("Hello World!\n");
return 0;
}
#import или как использовать com-объекти в VC++6.0
В нете нашел описание которое на всех сайтах почти одинаковое. http://www.sources.ru/cpp/cpp_pragma_import.shtml.
Код:
Далее после компиляции создается 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)
//
// 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;
}
//
// 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?
Код:
#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;
}
#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;
}
HRESULT hRes = adr.CreateInstance(clsID);//свой CLSID
наверное вместо adr надо ptr.
Цитата: AVDEY
Спасибо все получилось. Но здесь:
HRESULT hRes = adr.CreateInstance(clsID);//свой CLSID
наверное вместо adr надо ptr.
HRESULT hRes = adr.CreateInstance(clsID);//свой CLSID
наверное вместо adr надо ptr.
Разумеется. Опечатка вышла.