咨询C#生成供C++调用的.tlb对应COM对象是in-proc还是out-of-proc
关于C#生成的TLB对应COM对象的进程模型解答
嘿,这个问题抓得很准!先给你明确核心结论:TLB本身只是类型描述文件,不决定COM对象是进程内还是进程外——真正起决定作用的是你的C#项目编译出来的宿主载体(DLL/EXE)。
下面具体拆解两种情况:
- 如果C#项目编译为Class Library(DLL):
当你通过regasm.exe(或者regsvcs.exe针对服务类组件)注册这个DLL为COM组件后,它就是进程内(in-proc)COM服务器。此时C代码调用时,这个C# DLL会被直接加载到C进程的地址空间里运行,和你了解的普通DLL型COM服务器逻辑完全一致。 - 如果C#项目编译为Windows Application(EXE):
要是你把这个EXE注册为COM服务器,那它就是进程外(out-of-proc)COM服务器。C++调用时会单独启动这个C# EXE进程,两者通过COM的跨进程通信机制(比如RPC)交互,和普通EXE型COM服务器的运行模式相同。
额外补充下:TLB(类型库)的角色只是给C代码提供类型元数据——比如接口定义、方法签名、参数类型这些,让C编译器能在编译时做类型检查,生成正确的调用代码,它本身并不参与COM对象的运行时承载。
内容的提问来源于stack exchange,提问作者Vrinda
相关产品推荐
相关产品推荐

