zoukankan      html  css  js  c++  java
  • C#调用c++创建的dll

    在C++创建DLL,以及使用C++或者C#分别调用DLL中的方法,环境VS2005。
    VS2005中很多工程都可以生成DLL,例如atl,mfc,win32等等。选择Win32,步骤如下:

    1:新建项目TestDLL,选择win32中的win32控制台应用程序,在“应用程序设置”中,选择“应用程序类型”为DLL,并将下方的附加选项勾上“空项目”,就可以了。  
    2:添加一个C++类,这时vs2005会生成TestDLL.h和TestDLL.cpp的文件,在.h文件中,键入如下代码:

     #define LIBEXPORT_API extern "C" __declspec(dllexport) 

     LIBEXPORT_API int f( char * ch);

    //这是一个测试程序  
    3:然后在.cpp文件中,必须加入DllMain函数以作为程序出口,并实现函数f:

     BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)

     {

    //程序出口    

      return TRUE;

     }  
    //函数的实现在这里 LIBEXPORT_API int f(char * ch)

     {    

      return 88;

    }  
    4:编译生成,就能得到与项目同名的TestDLL.dll。

    注意,生成的dll文件在外面的一个debug文件中。
    接下来该怎么调用dll,分别在C++和C#做了调用。调用过程如下:

     C++调用:

     1:首先将dll文件加入工程,拷贝dll置于c++项目文件所在的目录。

     2:调用代码   typedef int (*TEST) (char * ch);

    //定义调用DLL函数的类型  

     //下面是调用过程

      HINSTANCE hDLL;    TEST f;   hDLL = LoadLibrary(_T("TestDLL.dll"));

    //加载动态链接库TestDLL.dll文件; 

      f = (TEST)GetProcAddress(hDLL,(LPCSTR)"f");

    //调用的f函数  

     int si ;   si = f("abc");   

     FreeLibrary(hDLL);

    //卸载TestDLL.dll文件;   

     cout<<si;  

     return 0;

    3:结果——屏幕返回88,正确地调用了dll中的方法。 


    C#调用:

     1:将dll文件拷贝至C#执行文件所在目录,一般在/bin/debug目录下;

     2:调用代码  

    using System.Runtime.InteropServices;

      ... 

      ...     

     class CallDLL   

       {

    //使用一个类封装所有dll的函数   

           [DllImport("TestDLL.dll", EntryPoint = "f",  

                CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]

    //指定dll访问入口     

         public static extern int  f(string s);

    //定义调用dll中函数的类型     

     } ...

     //使用dll中的函数

     int m = CallDLL.f("mmm");

    3:结果m的值正是88,操作成功。

  • 相关阅读:
    Fidder4 顶部提示 “The system proxy was changed,click to reenable fiddler capture”。
    redis 哨兵 sentinel master slave 连接建立过程
    虚拟点赞浏览功能的大数据量测试
    python基础练习题(题目 字母识词)
    python基础练习题(题目 回文数)
    python基础练习题(题目 递归求等差数列)
    python基础练习题(题目 递归输出)
    python基础练习题(题目 递归求阶乘)
    python基础练习题(题目 阶乘求和)
    python基础练习题(题目 斐波那契数列II)
  • 原文地址:https://www.cnblogs.com/wwb0111/p/3098971.html
Copyright © 2011-2022 走看看