C#调用C++写的Native DLL

本文介绍了如何在C#项目中调用由C++编写的Native DLL,详细阐述了C++模块定义文件、头文件及源文件的编写过程,为C#与C++之间的跨语言交互提供了一种实现方案。
摘要由CSDN通过智能技术生成

C#部份

namespace testInteroperability
{
    class MsgBoxTest
    {
        [DllImport("user32.dll")]
        static extern int MessageBox(IntPtr hWnd,string text, string caption,int type);

        public static void testMB()
        {
            MessageBox(IntPtr.Zero,
                "Please do not press this again.", "Attention", 0);
        }
    }
}


using System;
using System.Runtime.InteropServices;
using System.Text;

namespace testInteroperability
{
    class testMyDLL
    {
        /*
         * 内容:C#调用C++写的Native DLL的示例
         * 作者:kagula
         * 日期:20120920
         * 测试环境:VS2008SP1 .NET FRAMEWORK 3.5
         * 
         * 注意:
         * [1]你需要使用exeScope工具查看C++的函数导出后在DLL中的入口名称
         * 下面语句EntryPoint后跟的是C++函数导出后,在DLL中的入口名称
         * 因为c++的重载机制,同个函数名可以有不同的参数和返回值等等,为了区别开来,所以加了@@之类
         * 
         * [2]如果你经常修改C++DLL中的函数参数列表,VC会自动生成新的引用名称很不方便
         * 这时,你可以在C++项目中,[Add]->[New Item]->[Visual C++]->[Code]->[Module-Definition File(.def)]
         * 添加一个模块定义文件(.def),定义函数外部引用的名称。
         * 
         * [3]你必须修改你的DLL项目的DLL输出路径到C#程序的输出路径中
         * 例"<Solution所在路径>\<Solution名称>\<项目名称>\bin\Debug"
         * 
         * [4]C++的DLL项目同C#测试DLL的项目要放在同一个Solution中
         * 勾选C#项目属性[Debug]->[Enable Debuggers]->[Enable unmanaged code debugging]选项
         * 现在调试你的C#项目自动会进入到你在C++项目中下的断点。
         * 
         * 
         * 参考资料
         * [1]《Type Library Importer in Managed Code》
         * http://clrinterop.codeplex.com/releases/view/17579
         * [2]《How to copy a String into a struct using C#》
         * http://www.codeproject.com/Articles/7357/How-to-copy-a-String-into-a-struct-using-C
         * [3]《C#中具体如何调用Win32函数》
         * http://www.pinvoke.net
         * [4]《C++字符集问题终极分析(可解决乱码问题)》
         * http://hi.baidu.com/xddipuauedhkpqe/item/b59ee29082aaff35336eebcc
         */

        //测试基本调用,引用名称,为VC自动生成
        [DllImport(@"MyDLL.dll", EntryPoint = "?fnMyDLL@@YAHXZ")]  
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kagula086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值