|
30
|
| Douglas Anderson · 技术社区 · 16 年前 |
|
1
23
是的,这是完全可能的。只需将4.0中编写的组件作为COM对象公开即可。2.0宿主应用程序只是将它们用作COM对象,不知道它们是本机的、2.0的、4.0的还是其他的。COM是两个运行时版本必须相同实现的公共接口。 4.0中新的进程内SxS支持意味着,当加载基于4.0的COM对象时,它会拉入所需的运行时,而不是尝试在2.0上运行,因此这两个运行时都出现在管理自己对象的进程中。虽然不能直接在它们之间传递CLR对象,但是可以传递COM接口,并且CLR将对象透明地包装在COM接口中。 我不知道是否可以为两个版本制作一个互操作程序集。但很明显,您可以在2.0中用C编写一个互操作程序集,将其导出到.tlb,然后在4.0中将其导入程序集。这将提供两个描述相同COM接口的匹配互操作程序集(或者在每个版本的汇编项目中构建相同的C源代码)。 奖金更新: 生成的应用程序是否是基于COM的(包含任何问题)? 这要看你怎么看。组件的作者将把它们制作成COM组件。因此,主机应用程序需要将它们作为COM组件进行定位和加载。这意味着要玩弄GAC、注册表或SxS清单,这比仅仅告诉组件作者将其程序集放到某个目录中以便您可以用反射加载它要干净得多。
三
涉及的对象。主机有一个对RCW的引用,RCW有一个指向CCW实现的COM接口的指针,CCW又有一个对实际组件的引用。中间的ccw是一个引用计数的COM对象,而主机的RCW有一个调用终结器。
这意味着,如果回调指针等的排列足够复杂,系统最终可能会出现循环引用计数问题,即断开连接的对象“孤岛”都持有彼此的引用,因此它们永远不会被释放。 |
|
|
2
10
请注意,版本4.0不仅仅是附加程序集。在此版本中,运行时本身也发生了更改(新的并发GC模式、对线程池的大量更改、mscorwks.dll现在称为clr.dll等)。 |
|
|
3
10
我刚刚发表了一篇文章,基本上是丹尼尔的建议。 How to use a .NET 4 based DLL from a .NET 2 based application 源代码和说明位于: http://code.msdn.microsoft.com/Using-a-NET-4-Based-DLL-bb141db3 |
|
4
3
|
|
|
5
1
在这种情况下,添加到clr4的进程内并行功能似乎没有帮助,因为他希望在.NET2.0应用程序中使用.NET4.0库。据我所知,如果情况正好相反(在.NEt4.0应用程序中使用.NET2.0),进程内SxS会很有帮助,因为4.0的CLR将在同一进程中与2.0并排工作。。 |
|
|
6
0
为.NET 4编译的程序集将包含对.NET 2.0中不存在的其他.NET 4 framework库的引用。 如果希望应用程序与.NET2.0兼容,可以使用VisualStudio2005或 target |
|
|
7
0
我的应用程序也有一个类似的问题,我无法引用一个API,即使用.NET4.0组件。
|
|
|
Guilherme Albertini · DLL中的类 8 年前 |
|
|
Naomi · C#dll资源文件更改语言 8 年前 |
|
|
AidanH · C#DLL语言翻译实现[关闭] 8 年前 |
|
|
subham · DLL函数调用不工作 8 年前 |
|
|
PixelThis · 为什么我的DLL要求我的程序有一个特定的名称? 8 年前 |
|
|
nemo · DLL的“好”调用约定是什么? 8 年前 |