【转】.Net平台开发的技术规范与实践精华总结
http://blog.csdn.net/gongfs/archive/2007/02/09/1506129.aspx
三、Com和.Net互操作规范
.NET 技术已经成为微软平台的主流,但是在Win32时代开发了很多COM、DCOM组件,由于在开发COM组件时投入了大量的人力、财力,如何在.NET环境下重用这些COM组件就显得更有意义。
.NET支持运行时通过COM、COM+、本地WinAPI调用与未托管代码的双向互操作性,要实现互操作性,必须首先引入.NET Framework的 System.Runtime.InteropServices命名空间。
C#的语法为:
using System.Runtime.InteropServices;
(1).NET访问API
.NET允许C#访问未托管的DLL的函数。如要调用Windows User32.dll的MessageBox函数:
int MessageBox(HWND hwnd,LPCTSTR lpText, LPCTSTR lpCaption,UINT uType)
可以声明一个具有DLLImport属性的static extern方法:
using System.Runtime.InteropServices;
[DllImport(“user32.dll”)]
static ertern int MessageBox(int hwnd,string text,string caption,int type);
然后在代码里面直接调用就可以了。这里要注意在调用返回字符串的API中使用StringBuilder对象。
(2).NET访问COM组件
从.NET调用COM组件比较容易,只要使用tlbimp.exe产生COM的装配形式的WarpClass,然后在.NET项目中调用即可。
注意COM的类型信息通过Type Library文件描述,.NET装配件是自描述的。Tlbimp的作用是从COM组件及其类型信息中产生自描述的装配件。
1.编写Com组件
编译生成一个ComAccount.dll。
2. 产生.NET可访问的包装类(assembly),使用TlbImp.exe产生.NET装配件。
TlbImp /out:NetAccount.dll ComAccount.dll
3.在.NET代码中访问
.NET代码只需引用NetAccount.dll,就可以像访问.NET的装配件一样访问COM组件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?