Visual Studio 的 DllImport 缺陷

來源:互聯網
上載者:User

在Visual Studio寫cs檔案,調用非託管的win32 api要用到DllImport ,比如

 

 1 using System;
 2 using System.Runtime.InteropServices;
 3 
 4 class Example
 5 {
 6     // Use DllImport to import the Win32 MessageBox function.
 7     [DllImport("user32.dll", CharSet = CharSet.Auto)]
 8     public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
 9 
10     static void Main()
11     {
12         // Call the MessageBox function using platform invoke.
13         MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
14     }
15 }
16 

 我常常有這樣問題:

DllImport和public static這2行中最重要的部分要手動敲進去,比如函數名MessageBox和參數列表(IntPtr hWnd, String text, String caption, uint type),為什麼強大的Visual Studio不能自動完成?

 

我覺得如果Visual Studio做的比較人性化的話,應該這樣:

 在*.cs檔案上點擊右鍵,出來菜單“調用win api”或“DllImport”,彈出dll檔案選擇視窗(這裡可以把常用win32 dll列出來,免得去system32裡找),選擇dll檔案,確定,彈出dll的函數列表,每個函數名前面有個checkbox,選中checkbox,確定,自動將

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

插入到cs檔案的頭部,並且自動把函數的參數列錶轉換成csharp類型且填寫完成,多爽,為什麼ms沒做,不應該是沒想到。擷取函數名可以使用 dumpbin /exports user32.dll link /dump /exports user32.dll 命令。

 

最令我比較煩惱的是參數列表和參數類型。假如第三方廠商丟給你一個crypt.dll,沒有文檔,老闆讓你用c#調用crypt.dl實現產品的部分功能,即使我用了dumpbin 擷取了函數列表,但是我不知道參數啊,是不是就無法完成了?還有,假如有些函數參數不是c#的基礎資料型別 (Elementary Data Type),是不是也沒辦法做?大家說說看。

 

本人菜鳥不才,請園友不吝賜教。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.