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

ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ

ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้: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 โดยใช้ automatingMicrosoft c ++ Visual ดูบท 23-27 ของสมุด "c ภายใน Visual ++" โดยDavid J. Kruglinski (Microsoft Press)

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

คำเตือน: บทความนี้ได้รับการแปลโดยอัตโนมัติ

คุณสมบัติ

รหัสบทความ: 181473 - การตรวจสอบครั้งสุดท้าย: 12/05/2015 08:25:21 - ฉบับแก้ไข: 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

  • kbnosurvey kbarchive kbhowto kbmt KB181473 KbMtth
คำติชม