HOWTO: C++가 아닌 C 응용 프로그램에서 OLE 자동화를 사용하십시오.

기술 자료 번역 기술 자료 번역
기술 자료: 181473 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

요약

문서 블록을 OLE, 구성 요소 개체 모델 (COM), C++ 클래스의 이진 레이아웃이 주위에 설계되었기 때문에 C++ 대신 C 프로그램 할 경우 OLE 자동화 어려울 수 있습니다. 그러나 WINDOWS.H에 의해 포함된 헤더 파일을 C 컴파일 위한 기본 제공 지원 기능이, 따라서 C++ 개체의 동작을 모방하는 후 OLE 자동화 호출을 변경할 수 있습니다. 이 문서에서는 위로 Microsoft Excel을 시작하고 OLE 자동화를 통해 볼 수 있게 하는 C를 사용하여 Win32 콘솔 응용 프로그램을 빌드하는 방법에 대해 설명합니다.

추가 정보

다음 방법을 사용하십시오.
  1. 새 Win32 콘솔 응용 프로젝트를 만드는 Microsoft Visual C++ 5.0.
  2. Main.c 않은 Main.cpp 텍스트 파일을 프로젝트에 추가하십시오.
  3. Main.c 파일에 다음 코드를 추가하여:
          #include <stdio.h>
          #include <windows.h>
    
          void main(void) {
             IDispatch *pDisp; // Main IDispatch pointer.
             unsigned short *ucPtr; // Temporary variable to hold names.
             DISPID dispID; // Temporary variable to hold DISPIDs.
             CLSID clsid; // Holds CLSID of server after CLSIDFromProgID.
             HRESULT hr; // General error/result holder.
             char buf[8192]; // Generic buffer for output.
    
             // IDispatch::Invoke() parameters...
             DISPPARAMS dispParams = { NULL, NULL, 0, 0 };
             VARIANT parm1;
             DISPID dispidNamed = DISPID_PROPERTYPUT;
    
    
             // Initialize OLE Libraries.
             OleInitialize(NULL);
             {
                // Get CLSID for Excel.Application from registry.
                hr = CLSIDFromProgID(L"Excel.Application", &clsid);
                if(FAILED(hr)) {
                   MessageBox(NULL, "Excel not registered.", "Error",
                              MB_SETFOREGROUND);
                   return;
                }
                // Start Excel97, Excel 2000, or Excel 2002 and get its IDispatch pointer.
                hr = CoCreateInstance(&clsid, NULL, CLSCTX_LOCAL_SERVER,
                                      &IID_IDispatch, (void **)&pDisp);
                if(FAILED(hr)) {
                   MessageBox(NULL, "Couldn't start Excel.", "Error",
                              MB_SETFOREGROUND);
                   return;
                }
    
                // Get the 'visible' property's DISPID.
                ucPtr = L"Visible";
                pDisp->lpVtbl->GetIDsOfNames(pDisp, &IID_NULL, &ucPtr, 1,
                                             LOCALE_USER_DEFAULT, &dispID);
    
                sprintf(buf, "DISPID for 'Visible' property = 0x%08lx",
                        dispID);
                MessageBox(NULL, buf, "Debug Notice", MB_SETFOREGROUND);
    
                // Initiate parameters to set visible property to true.
                VariantInit(&parm1);
                parm1.vt = VT_I4;
                parm1.lVal = 1; // true
    
                // One argument.
                dispParams.cArgs = 1;
                dispParams.rgvarg = &parm1;
    
                // Handle special-case for property-puts!
                dispParams.cNamedArgs = 1;
                dispParams.rgdispidNamedArgs = &dispidNamed;
    
                // Set 'visible' property to true.
                hr = pDisp->lpVtbl->Invoke(pDisp,
                   dispID, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
                   DISPATCH_PROPERTYPUT | DISPATCH_METHOD,
                   &dispParams, NULL, NULL, NULL
                );
                if(FAILED(hr)) {
                   sprintf(buf, "IDispatch::Invoke() failed with %08lx", hr);
                   MessageBox(NULL, buf, "Debug Notice", MB_SETFOREGROUND);
                }
    
                // All done.
                MessageBox(NULL, "done.", "Notice", MB_SETFOREGROUND);
             }
             // Uninitialize OLE Libraries.
             OleUninitialize();
    
          }
    					
  4. 컴파일하고 실행하십시오.

참조

이 책에서는 "안쪽 OLE" Kraig Brockschmidt Microsoft Press에서 OLE, COM 및 자동화 관한 일반 정보를 참조하십시오.

IDispatch에 대한 자세한 내용은 Microsoft Visual C++ 온라인 도움말을 참조하십시오.

COM에 대한 자세한 내용은 OLE 및 Microsoft Visual C++를 사용하여 Microsoft Excel 자동화에 장 23-27 "안쪽 Visual C++" 김소희 J. Kruglinski Microsoft Press에서 책의 참조하십시오.

(c) Microsoft의 1999년, 예약 모든 권한. Joe Crump, Microsoft Corporation에 의해 기고물입니다.

속성

기술 자료: 181473 - 마지막 검토: 2007년 2월 12일 월요일 - 수정: 4.3
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
키워드:?
kbmt kbhowto KB181473 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com