Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
mister pOO
1 / 1 / 0
Регистрация: 26.11.2011
Сообщений: 33
#1

OLE Automation - C++

29.02.2012, 21:44. Просмотров 1184. Ответов 0
Метки нет (Все метки)

листинг
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "windows.h"
#include <iostream>
#include "ole2.h"
#include <stdio.h>
 
 
HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp, LPOLESTR ptName, int cArgs...) {
    // Begin variable-argument list...
    va_list marker;
    va_start(marker, cArgs);
 
    if(!pDisp) {
        MessageBox(NULL, "NULL IDispatch passed to AutoWrap()", "Error", 0x10010);
        _exit(0);
    }
 
    // Variables used...
    DISPPARAMS dp = { NULL, NULL, 0, 0 };
    DISPID dispidNamed = DISPID_PROPERTYPUT;
    DISPID dispID;
    HRESULT hr;
    char buf[200];
    char szName[200];
 
 
    // Convert down to ANSI
    WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL);
 
    // Get DISPID for name passed...
    hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);
    if(FAILED(hr)) {
        sprintf(buf, "IDispatch::GetIDsOfNames(\"%s\") failed w/err 0x%08lx", szName, hr);
        MessageBox(NULL, buf, "AutoWrap()", 0x10010);
        _exit(0);
        return hr;
    }
 
    // Allocate memory for arguments...
    VARIANT *pArgs = new VARIANT[cArgs+1];
    // Extract arguments...
    for(int i=0; i<cArgs; i++) {
        pArgs[i] = va_arg(marker, VARIANT);
    }
 
    // Build DISPPARAMS
    dp.cArgs = cArgs;
    dp.rgvarg = pArgs;
 
    // Handle special-case for property-puts!
    if(autoType & DISPATCH_PROPERTYPUT) {
        dp.cNamedArgs = 1;
        dp.rgdispidNamedArgs = &dispidNamed;
    }
 
    // Make the call!
    hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL);
    if(FAILED(hr)) {
        sprintf(buf, "IDispatch::Invoke(\"%s\"=%08lx) failed w/err 0x%08lx", szName, dispID, hr);
        MessageBox(NULL, buf, "AutoWrap()", 0x10010);
        _exit(0);
        return hr;
    }
    // End variable-argument section...
    va_end(marker);
 
    delete [] pArgs;
 
    return hr;
}
 
 
int main()
{
    std::cout  <<  "Initializing  COM"  <<std::endl;
    if  (  FAILED(  CoInitialize(  NULL  )))
    {
        std::cout << "Unable to initialize COM" << std::endl;
        return 0 ;
    }
    CLSID clsid;
HRESULT hr = ::CLSIDFromProgID( L"Excel.Application", &clsid );
 
if ( FAILED( hr ))
{
    std::cout << "Unable to get CLSID " << std::endl;
    return 0;
}
int i;
int j;
VARIANT a;
//a=5;
 
return 0;
 
}
// excell.cpp : Defines the entry point for the console application.
//
компиль ругается
obj\Debug\main.o||In function `Z8AutoWrapiP10tagVARIANTP9IDispatchPwiz':|
\Documents\codeblocks\mycom\main.cpp|30|undefined reference to `GUID_NULL'|
\Documents\codeblocks\mycom\main.cpp|56|undefined reference to `GUID_NULL'|
Не могу понять в чем ошибка? Функция AutoWrap взята с сайта майкрософта

Добавлено через 5 часов 9 минут
Решил с помощью
C++
1
const GUID IID_NULL = { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } };
появились другие ошибки
\Documents\codeblocks\mycom\main.cpp||In function 'int main()':|
\Documents\codeblocks\mycom\main.cpp|103|warning: deprecated conversion from string constant to 'WCHAR*'|
\Documents\codeblocks\mycom\main.cpp|111|warning: deprecated conversion from string constant to 'WCHAR*'|
\Documents\codeblocks\mycom\main.cpp|120|warning: deprecated conversion from string constant to 'WCHAR*'|
\Documents\codeblocks\mycom\main.cpp|152|warning: deprecated conversion from string constant to 'WCHAR*'|
\Documents\codeblocks\mycom\main.cpp|165|warning: deprecated conversion from string constant to 'WCHAR*'|
\Documents\codeblocks\mycom\main.cpp|172|warning: deprecated conversion from string constant to 'WCHAR*'|
\Documents\codeblocks\mycom\main.cpp|183|warning: deprecated conversion from string constant to 'WCHAR*'|
\Documents\codeblocks\mycom\main.cpp|187|warning: deprecated conversion from string constant to 'WCHAR*'|
obj\Debug\main.o||In function `main':|
\Documents\codeblocks\mycom\main.cpp|91|undefined reference to `IID_IDispatch'|
\Documents\codeblocks\mycom\main.cpp|110|undefined reference to `VariantInit@4'|
\Documents\codeblocks\mycom\main.cpp|119|undefined reference to `VariantInit@4'|
\Documents\codeblocks\mycom\main.cpp|131|undefined reference to `SafeArrayCreate@12'|
\Documents\codeblocks\mycom\main.cpp|143|undefined reference to `SafeArrayPutElement@12'|
\Documents\codeblocks\mycom\main.cpp|151|undefined reference to `VariantInit@4'|
\Documents\codeblocks\mycom\main.cpp|161|undefined reference to `SysAllocString@4'|
\Documents\codeblocks\mycom\main.cpp|164|undefined reference to `VariantInit@4'|
\Documents\codeblocks\mycom\main.cpp|166|undefined reference to `VariantClear@4'|
\Documents\codeblocks\mycom\main.cpp|195|undefined reference to `VariantClear@4'|
||=== Сборка закончена: 10 errors, 8 warnings (0 minutes, 1 seconds) ===|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.02.2012, 21:44     OLE Automation
Посмотрите здесь:

Что такое Автоматизация в OLE и COM - C++
Здорова! Только что прочитал главу про автоматизацию это типо не COM или COM хз. ниче не понял. Это типо OLE или чем OLE отличается от...

Дополнительный источник данных для провайдера OLE DB - C++
Подскажите пожалуйста, как лучше организовать дополнительный источник данных в разрабатываемом поставщике данных OLE DB.

Как зарегистрировать OLE Control через regsvr32? - C++
Здравствуйте! Возник у меня детский вопрос. Ответ должен быть простым, но может кто сталкивался, и думать не придется:-). Короче,...

Ole объект в программе и настройка опций проекта - C++
Здравствуйте, уважаемые! Сделала проект, в котором используется вызов Excel, как Ole объекта. Проект собрался, стал работать. Потом в...

Доступ к данным в *.mdb посредством OLE DB -- это возможно? - C++
Почти две недели бьюсь над этой проблемой. Перерыл весь инет, книжку по OLE DB купил... Не могу понять каким образом через OLE DB...

Где заказать в нете литературу по OLE,COM......(пожалуйста ответьте кто знает) - C++
Где можно найти толковую литературу по COM,OLE, базам данных, программированию в нете(все для VC++: ATL,MFC).Есть какие-то конкретныя книги?

Об OLE Automation - Visual C++
Извините за простой вопрос: Задача такая сперва записать данные в Excel, потом их прочесть (редактируются через Excel) , обработать и...

MS Access и OLE Automation - MS Access
В MS Access есть команда Создание-&gt;Таблица, которая создаёт пустую таблицу. Как можно через OLE Automation из другого приложения послать...

Rational Rose via COM (OLE Automation) - C++ COM
У кого-нибудь есть опыт использования ? Добавлено через 12 часов 41 минуту 22 секунды Уточним. Открыть модель : //Запустить...

Как использовать OLE Automation в c#? - C#
как юзать сабж в частности не работает xxx = new V77.Application() ; хотя с xxx = new Excell.Application() ; проблем нет :(((

Как использоваьб OLE automation? - Java
как использоваьб OLE automation в частности V77.Application ????

OLE Automation пару вопросов по Word - C++ Builder
Есть у меня парочка вопросов насчет Word. Как можно сделать так, чтобы изменять размер каждого столба в отдельности, знаю только как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru