上面兩篇文章分別介紹了.Net平台互操作技術面臨的問題,並重點介紹了通過P/Invoke調用Native C++類庫的技術實現。光說不做是假把式,本文筆者將設計實驗來證明P/Invoke調用技術的可行性。
1 實驗方案
通過上述分析,調用Native C++類庫的方式將采用平台調用技術(P\Invoke),整體方案可以用下圖表示:
3 實驗結果與分析
3.1 實驗結果
通過實驗,可以得出結論:C#調用C++ Library是可行的,並且在Native C++環境和C#環境之間完全可以傳遞內存數據塊,並能正確的解析。實驗結果的截圖如下:
3.2 潛在風險
C#調用Native C++類庫只需驗證C#語言可以操縱內存,就可以通過C#語言調用Native C++ Library的函數。實驗已經證明:通過unsafe和fixed關鍵字可以實現C#操縱內存,且通過Import C++ Dll,C#可以調用C++的函數。然而,在實際調用Native C++庫時,因為實際數據結構的復雜性,將會有一些新的問題出現。
4 參考資料
1. 黃際洲 崔曉源 精通.Net互操作P\Invoke, C++ Interop和COM Interop
2. http://msdn.microsoft.com/zh-cn/library/aa686045.aspx
3. http://www.cnblogs.com/xumingming/archive/2008/10/10/1308248.html
4. http://www.cnblogs.com/Jianchidaodi/archive/2009/03/09/1407270.html
5. http://www.jb51.net/article/23074.htm
6. http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx
7. http://msdn.microsoft.com/zh-cn/library/ms228628
8. http://blog.csdn.net/zhangzxy161723/archive/2009/04/28/4132853.aspx
9. http://hi.baidu.com/linzi1128/blog/item/dda5371fa7fa40cea6866946.html
10. http://blog.csdn.net/jadeflute/archive/2010/06/23/5689502.aspx
11. http://blog.csdn.net/null1/archive/2009/03/03/3953155.aspx
12. http://msdn.microsoft.com/en-us/library/eyzhw3s8(VS.80).aspx
13. http://www.cnblogs.com/suyang/archive/2008/03/06/1093827.html
14. http://ondotnet.com/pub/a/dotnet/2003/03/03/mcppp2.html
15. http://ondotnet.com/pub/a/dotnet/2003/01/13/intromcpp.html
16. http://ondotnet.com/pub/a/dotnet/2004/03/29/mcpp_part3.html
17. http://www.codeproject.com/KB/mcpp/cpptomancpp.aspx
18. http://blog.csdn.net/yingzai621/archive/2010/02/01/5278316.aspx
19. http://www.pinvoke.net/