C#静态调用C++ dll,动态调用C++ dll和C++调用C# dll

这篇博客总结了C#如何静态和动态调用非托管C++ dll,以及C++如何调用C#托管dll。在C#静态调用中,详细解释了DllImport的使用;动态调用部分,介绍了LoadLibrary、GetProcAddress和FreeLibrary等函数的用法;最后展示了C++如何通过/clr支持调用C#类库。

   最近碰到有关C#调用MFC dll的问题,查了很多资料,参考了不少的网上博客,做了如下总结,C#动静态调用C++ dll,C++调用C#dll。也算一个简单的自我整理,有问题也请提出来,共同进步。

C# 静态调非托管C++ dll

 1)C++ dll中含代码

    extern "C" __declspec(dllexport) int Add(int a,int b)

{return a+b;}

 2)C#调用dll  dll放在C#生成的文件中  C#代码中

引用加上:using System.Runtime.InteropServices;

class Program
    {
        [DllImport("CppDemo.dll", EntryPoint = "Add", ExactSpelling = false          CallingConvention = CallingConvention.Cdecl)]
        public static extern int Add(int a, int b); //DllImport请参照MSDN
        static void Main(string[] args)
        {
            Console.WriteLine(Add(12));
            Console.Read();
        }
    }

DllImport参数说明

说明:

1DllImport只能放置在方法声明上。

2DllImport具有单个定位参数:指定包含被导入方法的 dll 名称的 dllName 参数。

3DllImport具有五个命名参数:

   aCallingConvention 参数指示入口点的调用约定。如果未指定CallingConvention,则使用默认值CallingConvention.WinapiCalling Convention是指程序在函数调用时传递参数和获取返回值所采用的方法:通过寄存器、或通过栈、或者是两者的混合。

注释:_stdcall _cdecl是两种不同的函数调用约定,区别在函数参数入栈的顺序,由调用函数还是被调用函数将参数弹出栈,以及产生函数修饰名的方法。对于参数可变的函数如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值