WPF 使用 C# ,是屬於 Managed Code 而 NVAPI & ADL 是使用 C/C++ ,屬於 Unmanaged Code 所以必須透過橋樑來處理 第一步: 由 Using Unmanaged code and assembler in C# 知道 C# 可以透過 DllImport 來呼叫 DLL 中的 Function ,不過糟糕的是 NVAPI 是採用 Static Lib Link ,我們要使用的 Function 並沒有 Export 出來,因此折衷的辦法是在 NVAPI 外面再包一層 DLL ,然後將我們需要的 Function Export 出來給 C# 呼叫 ( 先試著直接呼叫,等比較熟後看是包成自訂控制項或其它方式 ) PS : 字串的處理記得在 DllImport 中設定 CharSet 的參數,否則 ANSI 與 UNICODE 未設定正確將產生錯誤 偵錯工具類型要設為 "混合",否則在 Managed Project 中無法偵錯 Unmanaged code NVAPI 採用 __cdecl、而 C# DllImport 預設是採用 __stdcall。我們的 DLL 是採用 Static Link 的方式呼叫 NVAPI,所以沒問題;但 C# 是用 Dynamic Link 方式呼叫 DLL,所以兩邊的 Calling Convention 必須一致,否則會產生堆疊錯誤。因此我們包的 DLL 要沿用 NVAPI 採用 __cdecl?還是配合 C# 採用 __stdcall 呢?暨然是 DLL,還是照慣例用 __stdcall 吧 Calling Convention cdecl 參數由右到左放入堆疊、呼叫端清除 (C/C++) MFC stdcall 由右到左、自行清除 (Win32) DLL pascal 由左到右、自行清除 (VC++2.0 & Win16) Borland Delphi fastcall 由左到右、自行清除 ( 前三個參數 EAX, EDX, ECX 剩下才放 Stack) Microsoft fastc...