C# 编写的ActiveX DLL / ActiveX OCX 是托管吗

bobogg 2011-06-20 08:15:03
http://webcache.googleusercontent.com/search?q=cache:KsHt3HSVtgkJ:www.builder.com.cn/2007/1112/626966.shtml+C%23+ActiveX+%E6%89%98%E7%AE%A1&cd=10&hl=zh-TW&ct=clnk&gl=tw&source=www.google.com.tw

以上这篇文章有提到

当 C# 调用 诸如 VC6编写的 ActiveX 二进制 DLL 时
其实Active X组件被加入Visual C#的"工具箱"时,
Visual Stuio .Net其实对ActiveX组件进行了很多操作,
而这些操作又都被Visual C#隐藏了,使用者往往并不完全清楚。
这些操作的作用就是把非托管的ActiveX组件转换成托管的组件


=== 问题1

也就是说 ActiveX 二进制组件 虽然被转换成托管的组件
但是 ActiveX DLL 本质还是 二进制, 只是外面多给他一道包装 , 请问这样理解对吗 ??
=================================================

问题1 延伸

如果是直接 用 C# 编写 ActiveX DLL (COM)
请问 C# 编写的 ActiveX DLL / ActiveX OCX 内部本质是以下哪一种

(1)
二进制 ActiveX DLL + 外面加上一层托管的外衣
就像一只虎给他披上羊皮, 虽然它看起来像羊, 但是本质上它还是一只老虎

(2)
完全托管 ActiveX DLL ( 意即 ActiveX DLL 内部的代码不是二进制 )
就像一只羊给他披上羊皮, 他绝对100%是一只真正的羊


我还不会写 C# , 若表达太离谱还请见谅



...全文
149 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
size大一点?你没有注意看懂我说的“类库”是什么意思吧?

你试一试,假设用户只需要2秒种、20秒钟,和至少20分钟才能访问,用户会抛弃哪一个网页?
bobogg 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sp1234 的回复:]

使用vc6写一个ActiveX,那么安装到客户端的类库(CAB文件中的)通常只有几百k字节。使用vb6来写一个ActiveX,相比vc6要快捷方便得多,但是安装到客户端的类库(CAB文件中的)需要将近2M字节。使用.net,你自己算吧,需要多大?
[/Quote]

写的东西都是自用的
size大一点没关系
本来都是用 VB6 写
但是 VB6不会有 64 bits
所以要来想一下要学哪种
bobogg 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 flyforfei 的回复:]

1楼正解,开发效率和运行效率不可兼得。
[/Quote]

这道理我知道
所以尽量找到一个平衡点
  • 打赏
  • 举报
回复
使用vc6写一个ActiveX,那么安装到客户端的类库(CAB文件中的)通常只有几百k字节。使用vb6来写一个ActiveX,相比vc6要快捷方便得多,但是安装到客户端的类库(CAB文件中的)需要将近2M字节。使用.net,你自己算吧,需要多大?
flyforfei 2011-06-20
  • 打赏
  • 举报
回复
1楼正解,开发效率和运行效率不可兼得。
bobogg 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 vrhero 的回复:]
如果你那么注重“执行速度”
托管程序可以直接调用native code,何必又搞个COM出来高不成低不就的....
[/Quote]

这问题是因为

native code 应该是要用 VC++, BC++, delphi 这些来写

但是这些我都不会, 要学也得花不少气力

若用 C# 编写 COM DLL 给 C# 调用就可以达到速度加速

那可省下很多气力另外去学 VC

我只是业余的, 写程序只是用来帮自己处理一些日常工作
恰好要用的有比较在意执行速度

本来是想学 delphi (可以写 win32)
但搜集了很多资料
知道可能会遇到有哪些麻烦 (如: delphi 要调用 VC 写的 COM 可能会有问题....)
所以打算放弃 delphi








vrhero 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bobogg 的回复:]
(1) 是不是会比 (2) 来得快呢 ???
[/Quote]
不见得...CLR库可是微软的产品,内部大量调用native code,你未必能比CLR做的更好...
vrhero 2011-06-20
  • 打赏
  • 举报
回复
.NET的优势之一是完全没有DLL地狱之忧,没有跨平台改写及编译之苦(至少在Windows家族平台上)...

如果你这么用.NET,就抛弃了.NET的优势...如果你那么注重“执行速度”,托管程序可以直接调用native code,何必又搞个COM出来高不成低不就的...
bobogg 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 vrhero 的回复:]

啊,不好意思...看错了,以为是说.NET程序注册为COM...

调用没有什么外衣,仅仅是为了COM程序生成了一个主互操作程序集,相当于一个适配器...COM程序没有任何改变...
[/Quote]

谢谢

请问

(1) 用 C# 编写 Com DLL , 然后给 C# 调用



(2) 用 C# 编写 Class , 然后给 C# 调用


既然 COM程序没有任何改变

(1) 是不是会比 (2) 来得快呢 ???

bobogg 2011-06-20
  • 打赏
  • 举报
回复
有人跟我说:

你可以用 VC6 编写 "二进制的 Com DLL 或 OCX" , 然后给 C# 调用, 这样可以让执行速度加快


所以我就想

(1) C# 编写 Com DLL , 然后给 C# 调用



(2) C# 编写 Class , 然后给 C# 调用

(1) 是不是会比 (2) 来得快

若不会比较快 表示 C# 编写的 COM 是完全托管的
若会比较快, 表示 C# 编写的 COM 是 "二进制 COM 再披上 托管程序 外衣"
vrhero 2011-06-20
  • 打赏
  • 举报
回复
啊,不好意思...看错了,以为是说.NET程序注册为COM...

调用没有什么外衣,仅仅是为了COM程序生成了一个主互操作程序集,相当于一个适配器...COM程序没有任何改变...
vrhero 2011-06-20
  • 打赏
  • 举报
回复
所以说你理解反了...
bobogg 2011-06-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vrhero 的回复:]

托管程序披上COM外衣...你理解反了...

.NET支持COM仅仅是为了兼容老标准,不管是本质还是表现都是100%的托管程序...
[/Quote]

我意思是

二进制 COM 披上 托管程序 外衣

不是

托管程序 披上 COM 外衣
vrhero 2011-06-20
  • 打赏
  • 举报
回复
托管程序披上COM外衣...你理解反了...

.NET支持COM仅仅是为了兼容老标准,不管是本质还是表现都是100%的托管程序...

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧