C#托管代码与C++非托管代码互相调用实例

C#托管代码与C++非托管代码互相调用实例

ID:40740234

大小:17.64 KB

页数:4页

时间:2019-08-07

C#托管代码与C++非托管代码互相调用实例_第1页
C#托管代码与C++非托管代码互相调用实例_第2页
C#托管代码与C++非托管代码互相调用实例_第3页
C#托管代码与C++非托管代码互相调用实例_第4页
资源描述:

《C#托管代码与C++非托管代码互相调用实例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C#托管代码与C++非托管代码互相调用一.C#中静态调用C++动态链接   1.建立VC工程CppDemo,建立的时候选择Win32Console(dll),选择Dll。   2.在DllDemo.cpp文件中添加这些代码。Codeextern"C"__declspec(dllexport)intAdd(inta,intb){         returna+b;}   3.编译工程。   4.建立新的C#工程,选择Console应用程序,建立测试程序InteropDemo   5.在Program.cs中添加引用:usingSystem.Runtime.InteropServic

2、es;   6.在pulicclassProgram添加如下代码:CodeusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;namespaceInteropDemo{    classProgram    {        [DllImport("CppDemo.dll",EntryPoint="Add",ExactSpelling=false,CallingConvention=CallingConvention.Cdecl)]     

3、   publicstaticexternintAdd(inta,intb);//DllImport请参照MSDN        staticvoidMain(string[]args)        {            Console.WriteLine(Add(1,2));            Console.Read();        }    }}  好了,现在您可以测试Add程序了,是不是可以在C#中调用C++动态链接了,当然这是静态调用,需要将CppDemo编译生成的Dll放在DllDemo程序的Bin目录下二.C#中动态调用C++动态链接在第一节中,讲了静态

4、调用C++动态链接,由于Dll路径的限制,使用的不是很方便,C#中我们经常通过配置动态的调用托管Dll,例如常用的一些设计模式:AbstractFactory,Provider,Strategy模式等等,那么是不是也可以这样动态调用C++动态链接呢?只要您还记得在C++中,通过LoadLibrary,GetProcess,FreeLibrary这几个函数是可以动态调用动态链接的(它们包含在kernel32.dll中),那么问题迎刃而解了,下面我们一步一步实验   1.将kernel32中的几个方法封装成本地调用类NativeMethodCodeusingSystem;usingSy

5、stem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;namespaceInteropDemo{    publicstaticclassNativeMethod    {        [DllImport("kernel32.dll",EntryPoint="LoadLibrary")]        publicstaticexternintLoadLibrary(            [MarshalAs(UnmanagedType.LPStr)]stringlpLibF

6、ileName);        [DllImport("kernel32.dll",EntryPoint="GetProcAddress")]        publicstaticexternIntPtrGetProcAddress(inthModule,            [MarshalAs(UnmanagedType.LPStr)]stringlpProcName);        [DllImport("kernel32.dll",EntryPoint="FreeLibrary")]        publicstaticexternboolFreeLibrary(

7、inthModule);    }}   2.使用NativeMethod类动态读取C++Dll,获得函数指针,并且将指针封装成C#中的委托。原因很简单,C#中已经不能使用指针了,如下                   inthModule=NativeMethod.LoadLibrary(@"c:"CppDemo.dll");           IntPtrintPtr=NativeMethod.GetProcAddress(hModule,"Add");详细请

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。