HOWTO: ใช้ OLE Automation จากในโปรแกรมประยุกต์ C แทน c ++

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 181473 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

สรุป

ถ้าคุณต้องการเขียนโปรแกรมใน C แทน c ++, OLE Automation ได้ ยากได้เนื่องจากคอมโพเนนต์อ็อบเจกต์โมเดล (COM), คือบล็อกของ OLE ถูกออกแบบมาล้อมรอบรูปแบบไบนารีของคลาส c ++ ส่วนหัวของแฟ้ม รวม โดย WINDOWSH อย่างไรก็ตาม มีอยู่แล้วภายในในการสนับสนุนสำหรับ C compilations ดังนั้น คุณสามารถเลียนแบบลักษณะการทำงานของวัตถุ c ++ และทำการ OLE การเรียกระบบอัตโนมัติ บทความนี้อธิบายถึงวิธีการสร้างคอนโซล Win32 แอพลิเคชัน การใช้ C ที่เริ่มต้น Microsoft Excel และทำให้มองเห็นได้ ผ่านการทำงานอัตโนมัติของ OLE

ข้อมูลเพิ่มเติม

ใช้วิธีการต่อไปนี้:
  1. สร้างโครงการ "ประยุกต์ Win32 Console" ใหม่ใน Microsoft 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, COM และ Automation ศึกษา สมุดบัญชี "ภายใน OLE" โดย Kraig Brockschmidt (Microsoft Press)

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ IDispatch ปรึกษา Microsoft c ++ที่มองเห็น วิธีใช้แบบออนไลน์

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ COM, OLE และ Microsoft Excel โดยใช้ automating Microsoft c ++ Visual ดูบท 23-27 ของสมุด "c ภายใน Visual ++" โดย David J. Kruglinski (Microsoft Press)

(c) 1999 Microsoft Corporation สงวนสิทธิ์ทั้งหมด การสนับสนุน โดย Joe Crump, Microsoft Corporation

คุณสมบัติ

หมายเลขบทความ (Article ID): 181473 - รีวิวครั้งสุดท้าย: 28 มกราคม 2554 - Revision: 3.0
ใช้กับ
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
Keywords: 
kbhowto kbmt KB181473 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:181473

ให้ข้อเสนอแนะ

 

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