在.NET迅速崛起的时代,我们并不能完全抛弃COM时代使用VB6开发的各种应用程序,因此实现Visual Basic.NET和VB6之间的互操作就显得十分必要了。本书由浅入深介绍了互操作涉及的各种问题,详细讲述了.NET与COM互操作的各种机制,并给出了一些实际的应用示例。在示范了具体的操作步骤后,本书还深入\r\n\r\n到系统内部讲述了互操作的实现细节,并对系统底层编程提出了相应的建议。\r\n\r\n 本书适用于那些想详细深入地掌握VB6与Visual Basic .NET互操作的开发人员,它对于把VB6系统升级为Visual Basic .NET提供了大量实用的操作方法。\r\n
\r\n
第1章 互操作功能的重要性 \r\n\r\n 1. 1 Visual Basic . NET概述 \r\n\r\n 1. 2 迁移方案 \r\n\r\n 1. 2. 1 VB6和Visual Basic . NET的不兼容之处 \r\n\r\n 1. 2. 2 迁移到Visual Basic . NET的好方案 \r\n\r\n 1. 2. 3 坏的迁移情况 \r\n\r\n 1. 2. 4 不能迁移的情况 \r\n\r\n 1. 2. 5 互操作性的含义 \r\n\r\n 1. 3 设计互操作方案 \r\n\r\n 1. 3. 1 Web服务 \r\n\r\n 1. 3. 2 智能型客户端 \r\n\r\n 1. 3. 3 新的ASP. NET前端 \r\n\r\n 1. 3. 4 扩充原有的组件 \r\n\r\n 1. 3. 5 分布式数据处理 \r\n\r\n 1. 4 互操作应用的主要范围 \r\n\r\n 1. 4. 1 在. NET中调用COM组件 \r\n\r\n 1. 4. 2 在COM中调用. NET组件 \r\n\r\n 1. 4. 3 在新旧程序间共享数据访问 \r\n\r\n 1. 4. 4 共享配置信息 \r\n\r\n 1. 4. 5 使用静态入口点调用非COM的DLL \r\n\r\n 1. 5 小结 \r\n\r\n 第2章 在. NET中使用COM组件 \r\n\r\n 2. 1 创建COM组件 \r\n\r\n 2. 1. 1 构建COM组件 \r\n\r\n 2. 1. 2 二进制兼容性 \r\n\r\n 2. 2 导入COM组件 \r\n\r\n 2. 2. 1 在设计阶段导入COM组件 \r\n\r\n 2. 2. 2 动态导入 \r\n\r\n 2. 3 使用COM组件 \r\n\r\n 2. 3. 1 早期绑定 \r\n\r\n 2. 3. 2 后期绑定 \r\n\r\n 2. 3. 3 对象的生存期 \r\n\r\n 2. 3. 4 多重接口 \r\n\r\n 2. 3. 5 继承性 \r\n\r\n 2. 3. 6 在.NET中检查COM组件 \r\n\r\n 2. 4 小结 \r\n\r\n 第3章 在COM中使用, NET程序集 \r\n\r\n 3. 1 创建.NET程序集 \r\n\r\n 3. 1. 1 创建. NET程序集概述 \r\n\r\n 3. 1. 2 对互操作进行设置 \r\n\r\n 3. 1. 3 使用ComClass()属性 \r\n\r\n 3. 1. 4 手工提供类 \r\n\r\n 3. 2 在COM中注册. NET程序集 \r\n\r\n 3. 2. 1 使用Visual Studio .NET \r\n\r\n 3. 2. 2 使用命令行实用程序 \r\n\r\n 3. 3 在COM和Windows中使用NET对象 \r\n\r\n 3. 3. 1 早期绑定 \r\n\r\n 3. 3. 2 后期绑定 \r\n\r\n 3. 3. 3 处理销定的文件 \r\n\r\n 3. 3. 4 对象生存期 \r\n\r\n 3. 3. 5 多重接口和默认接口 \r\n\r\n 3. 3. 6 在COM中检查. NET程序集 \r\n\r\n 3. 4 小结 \r\n\r\n 第4章 从. NET调用MTS和COM+中的COM组件 \r\n\r\n 4. 1 使用COM+组件 \r\n\r\n 4. 1. 1 创建COM+组件 \r\n\r\n 4. 1. 2 在Visual Basic . NET中调用COM+组件 \r\n\r\n 4. 1. 3 排队组件 \r\n\r\n 4. 2 传输数据 \r\n\r\n 4. 2. 1 使用AD0中的Recordset对象 \r\n\r\n 4. 2. 2 使用变量数组 \r\n\r\n 4. 2. 3 使用XML文档 \r\n\r\n 4. 3 在VB6中调用COM+中的.NET组件 \r\n\r\n 4. 3. 1 在. NET中创建CoM+组件 \r\n\r\n 4. 3. 2 使类可用于COM客户程序 \r\n\r\n 4. 4 小结 \r\n\r\n 第5章 COM+中的Visual Basic. NET和COM \r\n\r\n 5. 1 COM+和VB6 \r\n\r\n 5. 1. 1 为COM+创建ActiveXDLL \r\n\r\n 5. 1. 2 在COM+中注册DLL \r\n\r\n 5. 1. 3 创建VB6测试程序 \r\n\r\n 5. 2 COM+和Visual Basic . NET \r\n\r\n 5. 2. 1 在COM+中注册DLL \r\n\r\n 5. 2. 2 创建Visual Basic . NET测试程序 \r\n\r\n 5. 3 从COM+中的Visual Basic . NET中调用VB6组件 \r\n\r\n 5. 4 从COM+内的VB6中调用Visual Basic . NET组件 \r\n\r\n 5. 5 小结 \r\n\r\n 第6章 定制编组 \r\n\r\n 6. 1 四种不同的编组方法 \r\n\r\n 6. 1. 1 第一种编组方法:使用Tlbimp. exe \r\n\r\n 6. 1. 2 第二种编组类型(简单数据类型编组):将属性添加到使用标推类型的接口中 \r\n\r\n 6. 1. 3 第三种编组类型:对COM和. NET之间传递的自定义数据结构进行编组 \r\n\r\n 6. 1. 4 第四种编组类型:实现ICustomMarshaler接口 \r\n\r\n 6. 2 性能问题 \r\n\r\n 6. 3 第二种编组类型 \r\n\r\n 6. 3. 1 Ildasm \r\n\r\n 6. 3. 2 Ilasm \r\n\r\n 6. 3. 3 使用带有第二种编组类型的Ildasm或者Ilasm \r\n\r\n 6. 4 第三种编组类型 \r\n\r\n 6. 5 第四种编组类型 \r\n\r\n 6. 6 托管代码到非托管代码 \r\n\r\n 6. 7 小结 \r\n\r\n 第7章 线程问题 \r\n\r\n 7. 1 线程的基础知识 \r\n\r\n 7. 1. 1 线程的复杂性 \r\n\r\n 7. 1. 2 使用单线程与多线程 \r\n\r\n 7. 1. 3 VB6中的线程 \r\n\r\n 7. 1. 4 Visual Basic . NET中的线程 \r\n\r\n 7. 2 线程之间的互操作 \r\n\r\n 7. 2. 1 在. NET中调用COM \r\n\r\n 7. 2. 2 在COM中调用. NET \r\n\r\n 7. 3 小结 \r\n\r\n 第8章 DCOM. 远程处理和Web服务 \r\n\r\n 8. 1 XML Web服务 \r\n\r\n 8. 2 . NET远程处理 \r\n\r\n 8. 3 DCOM \r\n\r\n 8. 4 XML Web服务和互操作 \r\n\r\n 8. 4. 1 从. NET中调用COM \r\n\r\n 8. 4. 2 从COM中调用. NET \r\n\r\n 8. 5 . NET远程处理和互操作 \r\n\r\n 8. 5. 1 从. NET中调用CoM \r\n\r\n 8. 5. 2 从COM中调用. NET \r\n\r\n 8. 6 小结 \r\n\r\n 第9章 共享配置信息 \r\n\r\n 9. 1 专用的INI文件 \r\n\r\n 9. 1. 1 INI文件的结构 \r\n\r\n 9. 1. 2 访问VB6中的INI文件 \r\n\r\n 9. 1. 3 访问Visual Basic . NET中的凹文件 \r\n\r\n 9. 2 使用Windows注册表存储配置设置 \r\n\r\n 9. 3 基于XML的配置文件 \r\n\r\n 9. 3. 1 访问带有. NET Framework类的XML配置信息 \r\n\r\n 9. 3. 2 使用Visual Basic . NET中的System. XML访问设置信息 \r\n\r\n 9. 3. 3 使用VB6中的MSXML访问设置 \r\n\r\n 9. 4 并行性问题 \r\n\r\n 9. 5 小结 \r\n\r\n 第10章 . NET中的平面文件访问 \r\n\r\n 10. 1 对于平面文件的随机访问 \r\n\r\n 10. 1. 1 VB6中的随机访问 \r\n\r\n 10. 1. 2 Visual Basic . NET中的随机访问 \r\n\r\n 10. 2 平面文件的二进制访问 \r\n\r\n 10. 2. 1 VB6中的二进制访问 \r\n\r\n 10. 2. 2 Visual Basic . NET中的二进制访问 \r\n\r\n 10. 3 顺序的文件访问 \r\n\r\n 10. 3. 1 VB6中的顺序访问 \r\n\r\n 10. 3. 2 Visual Basic . NET中的顺序访问 \r\n\r\n 10. 4 作为Visual Basic . NET中替代方案的流 \r\n\r\n 10. 4. 1 使用流技术的顺序访问 \r\n\r\n 10. 4. 2 使用流技术的二进制访问 \r\n\r\n 10. 5 小结 \r\n\r\n 第11章 在. NET中使用ADO \r\n\r\n 11. 1 AD0和ADO . NET之间的比较 \r\n\r\n 11. 1. 1 AD0优点和缺点 \r\n\r\n 11. 1. 2 在. NET中何时仍然需要ADO \r\n\r\n 11. 2 在.NET中使用ADO \r\n\r\n 11. 2. 1 Visual Basic . NET中的ADO代码 \r\n\r\n 11. 2. 2 数据绑定限制 \r\n\r\n 11. 2. 3 将一些AD0属性设置为字符串而引发的问题 \r\n\r\n 11. 2. 4 将ADORecordset转换为ADO. NET DataSet \r\n\r\n 11. 3 DA0和RD0的意义 \r\n\r\n 11. 4 小结 \r\n\r\n 第12章 在. NET中调用APl或静态DLL函数 \r\n\r\n 12. 1 . NET对使用带有静态入口点的DLL的需求在减少 \r\n\r\n 12. 1. 1 对访问Win此wsAPI的需求减少 \r\n\r\n 12. 1. 2 较旧代码的退休 \r\n\r\n 12. 2 平台调用服务 \r\n\r\n 12. 2. 1 声明APl \r\n\r\n 12. 2. 2 调用API函数 \r\n\r\n 12. 2. 3 给函数指定别名 \r\n\r\n 12. 2. 4 将结构作为参数传递 \r\n\r\n 12. 2. 5 数据编组问题 \r\n\r\n 12. 3 更多的控制 \r\n\r\n 12. 3. 1 控制数据编组 \r\n\r\n 12. 3. 2 使用DLLImport而不是Declare \r\n\r\n 12. 4 性能因素 \r\n\r\n 12. 5 小结 \r\n\r\n 第13章 . NET中ActiveX控件的互操作性 \r\n\r\n 13. 1 何时在.NET中使用ActiveX控件 \r\n\r\n 13. 2 Windows Forms控件和ActiveX控件之间的差异 \r\n\r\n 13. 3 在. NET中驻留ActiveX控件 \r\n\r\n 13. 3. 1 示例--Windows Media Player控件 \r\n\r\n 13. 3. 2 关于示例的注意事项 \r\n\r\n 13. 3. 3 从Properties列表中移出的Custom属性 \r\n\r\n 13. 3. 4 使用Aximp. exe创建包装器 \r\n\r\n 13. 3. 5 导入VB6 UserControls \r\n\r\n 13. 3. 6 不能导入的控件 \r\n\r\n 13. 3. 7 安全性 \r\n\r\n 13. 4 VB6中的. NET Windows Forms控件 \r\n\r\n 13. 5 小结 \r\n\r\n 第14章 VB6代码迁移的准备工作 \r\n\r\n 14. 1 停止使用默认的属性和方法 \r\n\r\n 14. 2 避免数组的非零下界 \r\n\r\n 14. 3 让所有的参数显式地传值或引用(ByRef或ByVal) \r\n\r\n 14. 4 将默认值放在所有可选的参数上 \r\n\r\n 14. 5 在独立的代码行上声明所有变量 \r\n\r\n 14. 6 注意声明变量的位置 \r\n\r\n 14. 7 避免UDT中的固定长度字符串 \r\n\r\n 14. 8 清除已作废的关键字 \r\n\r\n 14. 9 删除隐式对象实例化 \r\n\r\n 14. 10 停止隐式加载窗体 \r\n\r\n 14. 11 将数据绑定转换到ADO \r\n\r\n 14. 12 尽可能使用固有的常量 \r\n\r\n 14. 13 停止编写DHTML页面和WebClass \r\n\r\n 14. 14 包装API调用 \r\n\r\n 14. 15 从UI中得到逻辑并放入组件和类中 \r\n\r\n 14. 16 避免后期绑定 \r\n\r\n 14. 17 小结 \r\n
\r\n
本书读者对象
本书适用于那些对VB6非常熟悉, 但是想知道如何实现VB6与Visual Basic . NET互操作的程序开发人员.
本书假设您已经非常熟悉NET的整体结构及VB6与Visual Basic . NET的语法差异. 本书并不介绍VB6与Visual Basic . NET之间的差异, 也不讲述. NET技术. 如果您想了解. NET的基础知识或者Visual Basic .NET的详细内容, 请参考清华大学出版社翻译出版的下列书籍:
●《.NET Framework高级编程》
●《VB .NET高级编程》
本书主要内容
第1章“互操作功能的重要性”, 讲述VB6及COM与新的.NET平台之间的互操作存在的必要性.
第2章“在.NET中使用COM组件”, 讲述如何将COM组件导入到.NET平台中, 使其可用于.NET环境, 但此时它仍作为COM组件运行在COM当中. 同时还将讲述如何设计COM组件和接口才能让. NET轻松地以.NET的方式处理这些组件.
第3章“在COM中使用. NET程序集”, 介绍和第2章相反的内容——如何创建一个能用于COM应用程序中的. NET程序集, 同时还将介绍如何有效地使用这个程序集.
第4章“从.NET调用MTS和COM+中的COM组件”, 其中将重点介绍在Visual Basic . NET客户端应用程序中使用COM+或基于MTS的COM组件.
第5章“COM+中的Visual Basic . NET和COM”, 介绍运行在COM+中的Visual Basic . NET程序集是如何与同处其中的VB6组件进行交互的, 以及相反的过程.
第6章“定制编组”, 使用编组的不同机制——非托管代码与托管代码之间互相传递信息.
第7章“线程问题”, 介绍在Visual Basic .NET和VB6之间进行互操作时可能产生的线程问题. 其中将讲述线程在COM环境下是如何在VB6中运行的, 接着将讲述在. NET平台上它是如何在Visual Basic .NET中运行的.
第8章“DCOM. 远程处理和Web服务”, 内容涉及通过COM互操作使用DCOM, 及.NET平台提供的DCOM替代技术——XML Web服务和. NET远程处理技术.
第9章“共享配置信息”, 讨论使用私有的INI文件. Windows注册表和基于XML的配置文件来共享存在于VB6及Visual Basic . NET中的配置信息.
第10章“. NET中的平面文件访问”, 介绍从VB6升级到Visual Basic .NET时, 二进制方式. 随机方式和顺序方式访问平面文件各有哪些变化.
第11章“在NET中使用AD0”, 对比ADO和ADO.NET, 并将讨论在哪些情况下应该继续使用ADO, 包括在Visual Basic . NET中的新项目中使用ADo的情形. 另外还将考察在.NET及VB6中使用AD0的差别.
第12章“在.NET中调用API或静态DLL函数”, 介绍. NET与不带COM接口的DLL之间的互操作性, 此外还将介绍通常哪些情况允许VB程序来处理Windows API函数.
第13章“. NET中ActiveX控件的互操作性”, 介绍一种需要特殊处理的COM组件——ActiveX控件.
第14章“VB6代码迁移的准备工作”, 如果继续使用或增强现有的VB6程序, 本章将提供一些概要性的指导原则, 这些原则将减少向Visual Basic . NET迁移的工作量.
本书的使用要求
使用本书需要您在计算机上能够运行下列软件:
●Windows 2000/XP
●Visual Studio . NET专业版(或者更高版本)
●带有Visual Basic 6. 0的Visual Studio 6. 0
用户支持
我们一贯重视读者的意见, 并想知道每位读者对本书的看法, 包括读者喜欢和不喜欢的内容, 以及读者希望我们下一次完善的地方. 您可以通过发送电子邮件(地址为feedback@wrox. com)来向我们反馈意见. 请确保反馈信息提到本书的书名.
如何下载本书的范例代码
当您访问Wrox公司站点(地址为http://www. wrox. com/)时, 通过Search工具或书名列表, 可以方便地找到需要的书目. 然后, 单击Code栏中的Download超链接, 或者单击本书的详细页面中的DownloadCode超链接, 就可以下载相应的范例代码.
从我们的站点上下载的文件都是使用WinZip压缩过的文档. 将附件保存到本地磁盘上的文件夹中后, 需要使用一个解压缩程序(例如WinZip或PKUnzip)来解压缩文件. 在解压缩文件时, 通常将代码解压缩到每一章所在的文件夹中. 在解压缩的过程中, 应确保解压缩程序 (Winzip. PKUnzip, 其他)被设置为使用原有文件夹名.
勘误表
我们已经尽最大努力确保本书中的文本和代码没有错误, 但是错误仍然在所难免. 如果您发现本书存在错误, 例如拼写错误或不正确的代码段, 请反馈信息给我们, 我们将不胜感激. 勘误表的发送可以节约其他读者学习本书的时间, 而且能够帮助我们提供更高质量的信息. 您可以将E-mail信息发送到support@Wrox. com. 您的反馈信息将被检查, 如果正确, 将被粘贴到本书的勘误页面上, 或者在本书的后续版本中使用.
要在我们的站点上找到勘误表, 请访问http://www. Wrox. com/, 并通过Advanced Search或者书名列表轻松定位本书页面. 然后, 单击BookErrata超链接即可, 该链接位于本书的详细页面中的封面图解下面.
E-mail支持
如果您希望直接向详细了解本书的专家咨询本书中问题, 可以把电子邮件发送到support@wrox. com. 一个典型的电子邮件应包括下面的内容:
在主题字段中必须有本书的书名. ISBN的后4位数字和问题的页数.
信息的正文应包括您的名字. 联系信息和问题.
我们不会给您发送无用邮件, 我们需要有用的详细资料, 以便可节约您和我们的时间. 当您发送一个电子邮件信息时, 将得到下面一系列支持:
用户支持:首先, 您的信息将被递送到我们的用户支持人员手中, 并由他们阅读. 对于一些被频繁提到的问题将被归档, 并将立即回答有关本书或者Web站点的任何常见问题.
编辑支持:接着, 一些有深度的问题将被送到对本书负责的技术编辑手中, 他们在程序设计语言或者特定的产品上有着丰富的经验, 能够回答相关主题的详细技术问题.
作者支持:最后, 如果编辑不能回答您的问题(这种情况很少发生), 他们将请求本书的作者. 我们将尽量保护作者免受干扰, 以便不影响其写作. 然而, 我们也非常高兴转寄给他们一些特殊的问题. 所有Wrox公司的作者都为他们的书提供技术支持. 作为回应, 他们将发送电子邮件给用户和编辑, 进而使所有的读者受益.
Wrox公司的支持过程仅仅对那些与我们出版的书目内容直接相关的问题提供支持, 对于超出常规书目支持的问题, 您可以从http://p2p. wrox. com/论坛的公共列表中获得支持信息.
p2p. wrox. com站点
为了便于作者和其他人讨论, 特将讨论内容加入到P2P站点的邮件列表中, 而且我们惟一的系统将programmer to programmer TM(由程序员为程序员而作)的编程理念与邮件列表. 论坛. 新闻组以及所有其他服务内容(一对一的邮件支持系统除外)相联系. 如果您向P2P发送一个问题, 应该相信它一定会被登录邮件列表的Wrox公司作者和其他相关专家所检查到. 无论您是在阅读本书, 还是在开发自己的应用程序, 都可以在p2p. wrox. com站点中找到许多对自己有所帮助的邮件列表.
按照下面的步骤可以预定一个邮件列表:
(1)登录http://p2p. wrox. com/站点.
(2)从左边的主菜单栏选择一个适当的类别.
(3)单击您要加入的邮件列表.
(4)按照说明订阅并填写自己的邮件地址和密码.
(5)回复您收到的确认邮件.
(6)使用预定管理程序加入更多的邮件列表并设置自己的邮件首选项.
本系统提供最好支持的原因
您可以选择连接到整个邮件列表, 也可以只接收每周的邮件摘要. 如果您没有时问和工具来接收邮件列表, 可以直接查找我们的在线文档. 独特的Lyris系统可以将一些没有用的垃圾邮件删除, 并保护您的电子邮件地址不被侵扰. 当存在加入和离开列表以及任何有关列表的其他常见问题时, 请发送邮件到listsupport@p2p. wrox. com.