zoukankan      html  css  js  c++  java
  • 程序C++ to C#交互

    第一次用C#调用C/C++生成的DLL文件,感觉有点新鲜,事实上仅仅是实现了执行在公共语言执行库 (CLR) 的控制之外的“非托管代码”(执行在公共语言执行库(CLR)的控制之中的代码码称为“托管代码“)的东西,如何运用在托管下的非托管呢?如今给感兴趣的刚開始学习的人简单地写一个实现的全过程吧(有什么问题千万别笑):

    1.用VS2008选择其他语言(C++)创建一个控制台应用程序命名为Mydll1,然后选择应用程序类型为DLL,确定

     项目如图:

     

    在头文件 stdafx.h 下加入例如以下声明:

     

    #define LIBEXPORT_API extern "C" __declspec(dllexport) 
    LIBEXPORT_API 
    int Add(int a, int b);

     

     

    MyDll.cpp中实现这个函数:

    复制代码


    #include 
    "stdafx.h"

    int Add(int a,int b)
    {
     
    return a+b;
    }
    复制代码

     

    注意假设实现的方法是声明在其他头文件里的,一定要 加#include "xxx.h" 来引用这个声明了这个函数头文件。

    生成MyDll.dllMyDll.lib

    2.在Visual C# .net中引用dll文件

    新建Visual C#控制台应用程序命名为TestImportDll;

    MyDll.dllMyDll.lib复制到可运行文件文件夹下(如图):

    在Praogram.cs中加入引用using System.Runtime.InteropServices;

    按例如以下方式声明一个将要引用MyDll.dll中函数的类:

      

    复制代码
     class test
        {
            
    //[DllImport("..\..\lib\CppDemo.dll")]
            
    //public static extern void Function();

            
    //[DllImport("..\..\lib\CppDemo.dll")]
            
    //public static extern int Add(int i, int j);
            [DllImport("..\..\Lib\Mydll1.dll")]
            
    public static extern int Add(int a, int b);
        }
    复制代码

     

     最后在Main函数中调用这个类输出结果:

     

    复制代码
     static void Main(string[] args)
            {           

                Console.WriteLine(
    "result: " + test.Add(23).ToString());

                Console.ReadLine();
            }
    以下是Program.cs的代码:
    复制代码
    END(如图):
  • 相关阅读:
    centos 7更新yum源与更新系统
    IE报错:模块"scrrun.dll"已加载,但对DllRegisterServer的调用失败,错误代码为0x80004005
    translate和replace的区别
    windows10降低IE版本
    powerDesigner 报Unable to connect SQLState=08004 解决方法
    as php交互
    帝国cms模板list.var使用程序代码
    如何用PHP代码实现灵动标签的功能
    【转】PHP调试利器XDebug的安装与使用
    一个不错的资料大全 amfphp
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6873773.html
Copyright © 2011-2022 走看看