C++ 本机代码中的托管dll(通过com)。是进程内还是进程外com服务器?
我需要在本机代码(c++)中使用托管动态链接库(c#)。我找到了解决方案 就在这里。 (). 但困扰我的是 1) 托管动态链接库是否通过com作为进程内com服务器在本机代码中使用。如果是,怎么可能C++ 本机代码中的托管dll(通过com)。是进程内还是进程外com服务器?,c++,com,language-interoperability,C++,Com,Language Interoperability,我需要在本机代码(c++)中使用托管动态链接库(c#)。我找到了解决方案 就在这里。 (). 但困扰我的是 1) 托管动态链接库是否通过com作为进程内com服务器在本机代码中使用。如果是,怎么可能 2) 如果否,那么动态链接库如何在不由可执行文件执行的情况下充当进程外com服务器。这是进程内配置。这并不比直接使用P/Invoke机制更“不可能”。运行regasm时,它会对注册表进行必要的更改,以便当客户端调用CoCreateInstance()COM时,它知道它需要从相应的.NET程序集中P
2) 如果否,那么动态链接库如何在不由可执行文件执行的情况下充当进程外com服务器。这是进程内配置。这并不比直接使用P/Invoke机制更“不可能”。运行
regasm
时,它会对注册表进行必要的更改,以便当客户端调用CoCreateInstance()
COM时,它知道它需要从相应的.NET程序集中P/Invoke函数
“…COM知道它需要从相应的.NET程序集中P/调用函数。”--它本身证明必须创建新进程..从中加载clr和stuf…-->>process@sandeepbisht:不,您可以将CLR加载到完全相同的进程中。没问题。您认为托管程序如何调用Windows API?它们在同一个地址空间(inproc)中执行此操作。此场景与您的响应的1.thx相反……但启动clr本身并不是在创建进程吗?@sandeepbisht不,启动clr不会启动进程。可以以相当简单的方式混合本机代码和托管代码。CLR启动存在问题(速度相对较慢),在早期的CLR版本中,不能在同一个过程中有多个CLR版本,但这些问题大多是过去的事情。