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,操作成功。

  • 相关阅读:
    Service Name Port Number Transport Protocol tcp udp 端口号16bit
    linux linux 互传文件 win 不通过 ftp sftp 往linux 传文件(文件夹)
    soft deletion Google SRE 保障数据完整性的手段
    Taylor series
    Taylor's theorem
    Moving average
    REQUEST
    Unix file types
    mysqld.sock
    Tunneling protocol
  • 原文地址:https://www.cnblogs.com/cotty/p/2364236.html
Copyright © 2011-2022 走看看