首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 呼叫 Win32 API 函數完整教學與範例

     編輯:關於C#

前言

在 C# 開發中,有時需要呼叫 Windows 底層的 Win32 API 來實現 .NET Framework 未直接提供的功能。透過 System.Runtime.InteropServices 命名空間提供的互操作服務,我們可以輕鬆地在 managed code 中呼叫 unmanaged 的 DLL 函數。本文將以 MessageBox 為例,詳細說明如何定義、引入並呼叫 Win32 API。

核心步驟

1. 引入必要的命名空間

using System.Runtime.InteropServices;

2. 使用 DllImport 屬性定義外部方法

DllImport 屬性用於指定 DLL 路徑、進入點名稱、呼叫慣例等資訊。以 user32.dll 中的 MessageBox 為例:

[DllImport("user32.dll", EntryPoint = "MessageBox", ExactSpelling = false)]
public static extern int MessageBox(int hWnd, string text, string caption, uint type);
  • EntryPoint:指定 DLL 中的實際函數名稱,若與 C# 方法名相同可省略。
  • ExactSpelling:設為 false 允許執行時期依據字元集自動尋找 MessageBoxA (ANSI) 或 MessageBoxW (Unicode) 版本。
  • 參數型別對應:Win32 的 HWND → int 或 IntPtr,LPCTSTR → string,UINT → uint。

3. 完整程式碼範例

/* 
 * 撰寫者:zhanghua
 * 日期:2008/5/28
 */
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace NetMeeting.API
{
    public class Win32
    {
        [DllImport("user32.dll", EntryPoint = "MessageBox", ExactSpelling = false)]
        public static extern int MessageBox(int hWnd, string text, string caption, uint type);
    }
}

4. 呼叫方式

定義完成後,即可像呼叫普通 static 方法一樣使用:

using System;
using NetMeeting.API;

class Test
{
    public static void Main(string[] args)
    {
        // 參數:視窗控制代碼(0=無)、訊息內容、標題、類型(2=詢問圖示+是/否按鈕)
        Win32.MessageBox(0, "hello ,this is a c# invoke win32 api", "test", 2);
    }
}

進階主題預告

本文僅示範最基本的整數與字串參數傳遞。實務上常遇到結構體、指標、回呼函數 等複雜型別,將於後續文章詳細探討 StructLayout、MarshalAs、delegate 轉函數指標等進階技巧。

小結

掌握 DllImport 與型別對應規則,即可在 C# 中自由呼叫豐富的 Win32 API,極大擴展應用程式能力。記得妥善處理記憶體管理與錯誤碼檢查,確保程式穩定可靠。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved