รายละเอียด: rundll ของ Windows และอินเทอร์เฟซของ Rundll32

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

เนื้อหาบนหน้านี้

สรุป

Microsoft Windows 95, Windows 98 และ (Me) Edition Millennium ของ Windows ประกอบด้วยโปรแกรมอรรถประโยชน์บรรทัดคำสั่งทั้งสองที่มีชื่อว่า Rundll.exe และ Rundll32.exe ที่ช่วยให้คุณสามารถเรียกฟังก์ชันส่งออกไปจาก DLL 16 บิต หรือ 32 บิต อย่างไรก็ตาม โปรแกรม rundll ของและ Rundll32 ยังไม่มี อนุญาตให้คุณเรียกใช้ฟังก์ชันส่งออกไปจาก DLL ใด ๆ ตัวอย่างเช่น คุณสามารถ ไม่ใช้โปรแกรมอรรถประโยชน์เหล่านี้เมื่อต้องเรียกใช้ API Win32 (โปรแกรมประยุกต์ เรียกอินเทอร์เฟซการเขียนโปรแกรม) ถูกส่งออกไปจาก Dll ของระบบ โปรแกรมต่าง ๆ อนุญาตให้คุณเรียกใช้ฟังก์ชันต่าง ๆ จาก DLL ที่จะถูกเขียนลงอย่างชัดเจนเท่านั้น ถูกเรียก โดยเหล่านั้น บทความนี้แสดงรายละเอียดเพิ่มเติมเกี่ยวกับการใช้ rundll ของ และโปรแกรม Rundll32 ภายใต้ระบบปฏิบัติการ Windows ที่แสดงรายการข้างต้น

MIcrosoft Windows NT 4.0, Windows 2000 และ Windows XP ที่จัดส่ง ด้วย Rundll32 เท่านั้น ไม่มีการสนับสนุนสำหรับ rundll ของ (อรรถประโยชน์ของ Win16) บนแพลตฟอร์มอย่างใดอย่างหนึ่ง

โปรแกรมอรรถประโยชน์ rundll ของและ Rundll32 ถูกออกแบบเฉพาะสำหรับ หากต้องการใช้ภายในที่ Microsoft แต่ฟังก์ชันการทำงานโดยค่าเหล่านั้น เพียงพอทั่วสถานที่ที่มีในขณะนี้พร้อมใช้งานสำหรับการใช้งานทั่วไป โปรดสังเกตว่า Windows NT 4.0 ที่จัดส่งมาพร้อมกับโปรแกรมอรรถประโยชน์ Rundll32 เท่านั้น และ สนับสนุน Rundll32 เท่านั้น

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

Rundll32 rundll ของแท้

Rundll ของโหลด และเรียกใช้ Dll แบบ 16-บิต ในขณะที่ Rundll32 โหลด และเรียกใช้รุ่น 32 บิต Dll ถ้าคุณส่งชนิดไม่ถูกต้องของ DLL การ rundll ของ Rundll32 ตัวควบคุมอาจ ไม่สามารถเรียกใช้โดยไม่ต้องแสดงข้อความแสดงข้อผิดพลาดใด ๆ

บรรทัดคำสั่ง rundll ของ

บรรทัดคำสั่งสำหรับ rundll ของเป็นดังนี้:
   RUNDLL.EXE <dllname>,<entrypoint> <optional arguments>
				
ตัวอย่างมีดังต่อไปนี้:
   RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF
				
มี 3 ประเด็นที่ควรพิจารณาอย่างรอบคอบในบรรทัดคำสั่งข้างต้น:
  1. Rundll ของหรือ Rundll32 ค้นหาชื่อแฟ้ม DLL ที่ระบุในมาตรฐาน (โปรดดูเอกสารประกอบสำหรับฟังก์ชัน LoadLibrary() สำหรับรายละเอียด) ขอแนะนำว่า คุณใส่เส้นทางแบบเต็มไป DLL เพื่อให้แน่ใจว่า จะพบคำถูกต้อง เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด ใช้ชื่อแฟ้มแบบสั้นแทนชื่อแฟ้มแบบยาวเพื่อให้แน่ใจว่า ไม่มีอักขระที่ไม่ถูกต้องจะปรากฏ โปรดสังเกตโดยเฉพาะอย่างยิ่งว่า นี้หมายความว่า DLL ในโฟลเดอร์ "C:\Program:\แฟ้ม" ควรถูกแปลงให้เป็นชื่อสั้น ๆ เท่านั้น
  2. <dllname>อาจไม่ประกอบด้วยช่องว่างใด ๆ หรือเครื่องหมายจุลภาค หรือเครื่องหมายอัญประกาศ นี่คือข้อจำกัดในตัวแยกวิเคราะห์บรรทัดคำสั่ง rundll ของ</dllname>
  3. ในบรรทัดคำสั่งข้างต้น เครื่องหมายจุลภาค () ระหว่าง<dllname>และ<entrypont>ชื่อฟังก์ชันเหล่านี้เป็นเรื่องสำคัญอย่างยิ่ง ถ้าตัวคั่นเครื่องหมายจุลภาคที่หายไป rundll ของหรือ Rundll32 จะล้มเหลว โดยไม่มีข้อผิดพลาดใด ๆ ที่ระบุ นอกจากนี้ ไม่มีช่องว่างใด ๆ ระหว่าง<dllname>เครื่องหมายจุลภาค และ<entrypoint>ฟังก์ชันได้</entrypoint></dllname> </entrypont> </dllname>

วิธีการทำงานของ rundll ของ

Rundll ของดำเนินการตามขั้นตอนต่อไปนี้:
  1. ดังกล่าวแยกบรรทัดคำสั่ง
  2. จะโหลด DLL ที่ระบุผ่านทาง LoadLibrary()
  3. ดังกล่าวได้รับอยู่ของการ<entrypoint>ฟังก์ชันผ่าน GetProcAddress()</entrypoint>
  4. โปรแกรมเรียก<entrypoint>ฟังก์ชัน ส่งผ่านบรรทัดคำสั่งสุริยซึ่งเป็น<optional arguments="">.</optional> </entrypoint>
  5. เมื่อการส่งกลับของฟังก์ชัน<entrypoint>, Rundll.exe unloads DLL นั้นออก </entrypoint>

วิธีการเขียน DLL ของคุณ

ใน DLL ของคุณ เขียนฟังก์ชัน<entrypoint>กับแบบตัวอย่างต่อไปนี้: </entrypoint>

DLL 16 บิต:

  void FAR PASCAL __loadds
  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
				
DLL แบบ 32 บิต:
  void CALLBACK
  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
				
อีกครั้ง มี 3 ประเด็นที่ควรพิจารณา ด้วยฟังก์ชันจุดเข้าใช้งาน:
  1. เด่น ชื่อ "จุดเข้าใช้งาน" ควรถูกแทนที่ ด้วยชื่อจริงของฟังก์ชันของคุณ โปรดสังเกตว่ารายการของ Rundll32 ชี้จะไม่เกี่ยวข้องกับ DllEntryPoint ฟังก์ชันใน DLL แบบ 32 บิตที่แยกกระบวนการจับและเธรดใดแนบ/ออกแจ้งเตือนเรียบร้อยแล้ว
  2. ต้องมีกำหนดฟังก์ชันจุดรายการสำหรับ Rundll32 กับ _stdcall การเรียกแบบแผน (เริ่มต้นการเรียกกลับเมื่อต้องการใช้แอตทริบิวต์ _stdcall) ถ้าแอตทริบิวต์ _stdcall หายไป แล้วฟังก์ชันเป็นค่าเริ่มต้น _cdecl ที่มีการเรียกแบบแผน นั้นแล้ว Rundll32 จะถูกยกเลิกอย่างผิดปกติหลังจากการเรียกฟังก์ชัน
  3. เนื่องจากคุณต้องประกาศฟังก์ชัน ด้วย _stdcall เรียกแบบแผนตามที่อธิบายไว้ข้างต้น ต่อไปนี้จะจริง ๆ ส่งออกเป็น _EntryPoint@16 ถ้า DLL ถูกเขียนใน C คอมไพเลอร์ c ++ Visual หรือจะใช้เพิ่มเติมตกแต่งชื่อถ้า DLL ถูกเขียนใน c ++ ดังนั้น ควรระมัดระวังในการใช้ชื่อถูกส่งออกได้อย่างถูกต้องในบรรทัดคำสั่ง rundll ของหรือ Rundll32 ถ้าคุณต้องการหลีกเลี่ยงการใช้ decorated ชื่อ ใช้ไฟล์.def และฟังก์ชันการส่งออก โดยชื่อ โปรดอ้างถึงเอกสารประกอบของผลิตภัณฑ์และบทความต่อไปนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตกแต่งชื่อเมื่อใช้ c ++ Visual compilers:
    140485การส่งออกสัญลักษณ์เหมือน PASCAL ใน Dll แบบ 32 บิต
พารามิเตอร์ไปยังจุดที่ rundll ของรายการมีดังนี้:
   hwnd - window handle that should be used as the owner window for
          any windows your DLL creates
   hinst - your DLL's instance handle
   lpszCmdLine - ASCIIZ command line your DLL should parse
   nCmdShow - describes how your DLL's windows should be displayed
				
ในตัวอย่างต่อไปนี้:
     RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF
				
Rundll ของจะต้องเรียกฟังก์ชัน InstallHinfSection() จุดเข้าใช้งานใน Setupx.dll และส่งผ่านพารามิเตอร์ต่อไปนี้:
   hwnd = (parent window handle)
   hinst = HINSTANCE of SETUPX.DLL
   lpszCmdLine = "132 C:\WINDOWS\INF\SHELL.INF"
   nCmdShow = (whatever the nCmdShow was passed to CreateProcess)
				
โปรดสังเกตว่า เป็นฟังก์ชัน<entrypoint>(หรือ InstallHinfSection() ในการ ข้างบนตัวอย่าง) ที่มีการแยกวิเคราะห์ตัวเองการใช้บรรทัดคำสั่ง (lpszCmdLine พารามิเตอร์ต่าง ๆ ข้างบน) และใช้พารามิเตอร์แต่ละรายการตามความจำเป็น Rundll.exe วิเคราะห์จนถึงอาร์กิวเมนต์ไม่จำเป็นที่ส่งผ่านไปยังคำสั่งของเท่านั้น บรรทัด ส่วนเหลือของการแยกวิเคราะห์จนถึงฟังก์ชัน<entrypoint>อยู่ </entrypoint></entrypoint>

หมายเหตุพิเศษบนความแตกต่างระหว่าง Windows 95 และ Windows NT

ลักษณะการทำงานของ Rundll32.exe งต่างกันเล็กน้อย เพื่อที่จะรองรับบรรทัดคำสั่งของ UNICODE บน Windows NT, Windows 2000, Windows XP

Windows NT แรกพยายาม GetProcAddress สำหรับ<EntryPoint>ฝั่งตะวันตก ถ้าพบจุดนี้ แล้วแบบตัวอย่างจะถือว่าเป็น: </EntryPoint>
   void CALLBACK
   EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine,
               int nCmdShow);
				
นี่เป็นเหมือนกับจุดเข้าใช้แบบ ANSI งาน ยกเว้นที่ lpszCmdLine พารามิเตอร์เป็นสายอักขระ UNICODE ในขณะนี้

ถ้าไม่พบจุด<EntryPoint>รายการ W จากนั้น Windows NT จะ GetProcAddress สำหรับ<entrypoint>A และ<entrypoint> ถ้าอย่างใดอย่างหนึ่งพบ จากนั้นก็จะถือว่าเป็นจุด ANSI และถูกปฏิบัติในแบบเดียวกับ Windows 95/98/ระบบ ดังนั้น ถ้าคุณต้องการให้ DLL ของคุณให้ทำงานบน Windows 95 ด้วยการสนับสนุนแบบ ANSI และ บน Windows NT/2000/XP ด้วยการสนับสนุน UNICODE คุณควรส่งออกฟังก์ชันที่สอง: EntryPointW และจุดเข้าใช้งาน Windows NT/2000/Me จะเรียกฟังก์ชัน EntryPointW กับบรรทัดคำสั่งของ UNICODE บน Windows 95/98/Me จุดเข้าใช้งานฟังก์ชันจะถูกเรียก ด้วยบรรทัดใบสั่งแบบ ANSI </entrypoint></entrypoint></EntryPoint>

คุณสมบัติ

หมายเลขบทความ (Article ID): 164787 - รีวิวครั้งสุดท้าย: 5 พฤศจิกายน 2555 - Revision: 6.0
ใช้กับ
  • Microsoft Win32 Application Programming Interface เมื่อใช้กับ:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
Keywords: 
kbdll kbFAQ kbinfo kbkernbase kbprogramming kbusage kbmt KB164787 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:164787

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

 

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