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

OLE Automation - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
mister pOO
1 / 1 / 0
Регистрация: 26.11.2011
Сообщений: 33
29.02.2012, 21:44     OLE Automation #1
листинг
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
Посмотрите здесь:

C++ COM Rational Rose via COM (OLE Automation)
OLE Automation пару вопросов по Word C++ Builder
Как зарегистрировать OLE Control через regsvr32? C++
C++ Где заказать в нете литературу по OLE,COM......(пожалуйста ответьте кто знает)
Дополнительный источник данных для провайдера OLE DB C++
C++ Доступ к данным в *.mdb посредством OLE DB -- это возможно?
Об OLE Automation Visual C++
Как использоваьб OLE automation? Java
C# Как использовать OLE Automation в c#?
C++ Ole объект в программе и настройка опций проекта
C++ Что такое Автоматизация в OLE и COM
MS Access MS Access и OLE Automation

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

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

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