使用dynamic讓PInvoke更簡單

來源:互聯網
上載者:User
dynamic user32 = new DynamicDllImport("user32.dll", callingConvention : CallingConvention.Winapi);user32.MessageBox(0, "Hello World", "Platform Invoke Sample", 0);

能夠這樣調用動態串連庫中的方法,是不是很方便?!這就是Miguel de Icaza在他的blog中介紹mono中dynamic提到的方法。

C# 4's Dynamic in Mono  (http://tirania.org/blog/archive/2009/Aug-11.html)

瑞雪年又把它豐富了一下,加入了傳回值和ref (out)參數支援,樣本:

dynamic asmproject = new DynamicDllImport("asmproject.dll");int value = asmproject.add<int>(3, 4);Console.WriteLine(value);      dynamic sdl = new DynamicDllImport("SDL.dll", CharSet.Ansi);Sdl.SDL_Rect rect = new Sdl.SDL_Rect(                    0,                    0,                    (short)width,                    (short)height);int result = sdl.SDL_FillRect<int>(rgbSurfacePtr, ref rect, 0);Sdl.SDL_Event evt;while (sdl.SDL_WaitEvent(out evt) != 0){   if (evt.type == Sdl.SDL_QUIT)   {       break;    }}

具體實現代碼在這裡就不粘了,和引用的《C# 4's Dynamic in Mono》基本相同,只是作了部分添加和修改,大家可以到 http://code.google.com/p/dynamicdllimport/

查看或下載,如果有人在使用過程中發現bug或有更好的方法,本人真心希望能告之,有更新代碼可以上傳至上面的google code網站,希望更多的人能用上最新的代碼,先在這裡謝謝了!

類庫下載:http://dynamicdllimport.googlecode.com/files/DynamicDllImport_lib.zip

樣本下載:http://dynamicdllimport.googlecode.com/files/DynamicDllImport_Sample.zip

原碼下載:http://dynamicdllimport.googlecode.com/files/DynamicDllImport_source_code.zip

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.