




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisualC、delphi或者vb等编程语言来编写的DLL文件,在编译完成以后,产生DLL文件wen jian已经是一个可以直接供计算机使用的二进制文件,而Visualc#生成的DLL不是独立运行的程序,是某个程序的一个部分,只能由所属的程序调用,用户不能也不需要打开它,Visual C#编译器生成的托管代码虽然也是二进制文件,但不是可以直接供计算机使用的原始代码,实际上是一种中间语言(IL)代码,需要经过下一代窗口服务( Next Generation Windows Services,简写为NGWS ) runtime的即时编译器(即JIT)进行编译。用Visual C#生成的DLL文件已经和以前的DLL文件有了本质上的区别。用Visual C#生成的DLL文件在程序设计中更多的表现为一种类(Class)或者类库(Class Library)。 如果想在vc+的非托管代码中调用已经用VC#生成的托管的DLL,从两个方向进行调整可以产生两种办法:(visual studio 2008)(下面方法都是对于同一平台下,即C#跟VC+都是在windows平台下)一、对VC+的环境中进行修改使其支持托管代码: vc+调用端增加公共语言运行时【clr】的支持以执行C#的程序: 【解决方案】-【Properties】(右键)-【Configuration Properties】(展开左树) -【General】(打开子节点) -【Common Language Runtime support】(选中选项) -【Common Language Runtime support(/clr)】(选中)OK,现在就可以引入托管的动态连接库来用了,不过在调用时还是得注意语法(new-gcnew,.),例如下:#include stdafx.h#using SmartDeviceDLL.dllusing namespace SmartDeviceDLL;int _tmain(int argc, _TCHAR* argv) printf(1111111111111n); SmartDeviceDLL:ICalculator pICalc= gcnew SmartDeviceDLL:Class1(); long lResult =0; lResult=pICalc-Add(5,10); wprintf(Lthe result is %dn,lResult); printf(222222222222222222n); char c; scanf(%c,&c); return 0;二、C#生成DLL端编译成COM接口,供VC+以托管格式调用(命令的运行都是在visual studio command prompt (命令窗口)中)1.新建一个C#的动态连接库(在模板 ,下单击类库):using System;using System.Linq;using System.Collections.Generic;using System.Text; namespace SmartDeviceDLL public interface ICalculator int Add(int Number1, int Number2); public class Class1: ICalculator public int Add(int Number1, int Number2) return Number1 * Number2; public static int TestMethod(String s) Console.WriteLine(Managed assembly: 0, s); return s.Length; 2.为程序集创建一个强命名的类库,并在AssemblyInfo.cs文件中用AssemblyKeyFile属性指向它: 1)、使用强命名工具(Strong Name Utility)产生密钥对: sn -k MyKeyFile.snk 2)、在AssemblyInfo.cs文件中用AssemblyKeyFile属性指向它: 即在项目的文件AssemblyInfo.cs中将assembly: ComVisible(false)用以下内容替换: assembly: ComVisible(true) assembly: AssemblyDelaySign(false) assembly: AssemblyKeyFile(MyKeyFile.snk) /指向刚生成的文件(可用无汉字的绝对路径) 3)、重新编译,产生的程序集就是经过签名后的程序集了3.把生成的库文件加入全局程序集缓存(Global Assembly Cache, .NET CompactFramework支持一个工具,通常位于:CWndowsAssembly下)以便可以从任何 COM 客户端激活它,可以使用工具GACUtil.exe,指定/i命令开关将一个程序集安装到GAC中,同样可以使用/u命令开关将一个程序集从GAC中卸载。注意:安装的程序集必须是强命名程序集: GACUTIL /i SmartDeviceDLL.dll /可用SmartDeviceDLL.dll的绝对路径,Wince平台直接在命令窗口中用CGACUTIL(Compact)4.用下面的命令为COM注册刚才的程序集,生成COM库文件(程序集注册工具读取程序集中的元数据,并将所需的项添加到注册表中,注册表允许 COM 客户程序以透明方式创建 .NET Framework 类。类一经注册,任何 COM 客户程序都可以使用它,就好像该类是一个 COM 类。类仅在安装程序集时注册一次。程序集中的类实例直到被实际注册时,才能从 COM 中创建)/下面命令注册SmartDeviceDLL.dll 中包含的所有公共类,并生成和注册类型库 SmartDeviceDLL.tlb,该类型库包含 SmartDeviceDLL.dll 中定义的所有公共类型的定义 REGASM SmartDeviceDLL.dll /tlb:SmartDeviceDLL.tlb/或者可以选中:【解决方案】-【Properties】(右键)-【Build】-【Register for COM interop】(Wince平台的DLL此选项不可选)5.创建非托管的VC+调用程序(此处用Win32 Console Project为例):#include stdafx.h#import SmartDeviceDLL.tlb named_guids raw_interfaces_onlyusing namespace SmartDeviceDLL;int _tmain(int argc, _TCHAR* argv) printf(1111111111111n); /初始化COM以及产生智能指针HRESULT hr=CoInitializeEx(NULL,COINIT_MULTITHREADED); if(hr!=S_OK) printf(hr failedn); else printf(hr okn); printf(222222222222222222n); SmartDeviceDLL:ICalculatorPtr pICalc; printf(2.1n); HRESULT hRes=pICalc.CreateInstance(_uuidof(Class1),NULL,CLSCTX_ALL); /HRESULT hRes=pICalc.CreateInstance(SmartDeviceDLL:CLSID_Class1); printf(2.2n); if(hRes=S_OK) printf(hRes okn); long lResult =0; pICalc-Add(5,10, &lResult); wprintf(Lthe result is %dn,lResult); else printf(hRes failuren); printf(333333333333n); CoUninitialize(); printf(4444444444444444444n); char c; scanf(%c,&c); return 0;補充: 使用第1種方法時,字符串的處理:1)System:String - char *:char *ILStringToMultiBytes(System:String ilstring, char *multiBytes)const int LINE_SIZE = 256;wchar_t wideBytesLINE_SIZE;for (int i = 0; i Length; +i)wideBytesi = ilstringi;/cou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 24节气养生知识讲座
- 生物细胞模型讲解
- 文物修缮方案汇报
- 基层医疗卫生机构常见新生儿疾病诊疗指南新生儿复苏(2025年)
- 微针治疗技术原理与应用
- 企业安全技术能力
- 企业服务联盟汇报
- 消化内镜中心工作汇报
- 网红品牌线上线下融合创新创业项目商业计划书
- 移动支付场景化解决方案创新创业项目商业计划书
- 双方签定协议书
- 2024-2025学年八年级数学下册期末培优卷(北师大版)含答案
- 2025福建福州市鼓楼区国有资产投资发展集团有限公司副总经理公开招聘1人笔试参考题库附带答案详解(10套)
- 2025年12345热线考试题库
- 多余物控制管理办法
- 2025年卫生健康行业经济管理领军人才试题
- 河南省洛阳市2024-2025学年高一下学期期末质量检测物理试卷
- 雅思介绍课件
- 《电商直播运营》教案-任务1 直播平台与岗位认知
- 反邪教宣讲课件
- 2025年重庆市高考物理试卷(含答案解析)
评论
0/150
提交评论