С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

OLE Automation - C++

29.02.2012, 21:44. Просмотров 1257. Ответов 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) ===|
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.02.2012, 21:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос OLE Automation (C++):

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

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

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

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

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

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.02.2012, 21:44
Привет! Вот еще темы с ответами:

Где заказать в нете литературу по 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 секунды Уточним. Открыть модель : //Запустить...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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