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