1. 建立一个C++的Win32DLL,这里要注意选择"Export symbols"导出符号。点击完成。 如下图所示:

  2.  

    由于项目的名称是"TestCPPDLL",因此,会自动生成TestCPPDLL.h和TestCPPDLL.cpp两个文件,.h文件是要导出内容的声明文件,为了能清楚的说明问题,我们将TestCPPDLL.h和TestCPPDLL.cpp两个文件中的所有内容都删除,然后在TestCPPDLL.h中添加如下内容:

  3.  

    第一行代码中定义了一个名为"TESTCPPDLL_API"的宏,该宏对应的内容是"__declspec(dllexport)"意思是将后面修饰的内容定义为DLL中要导出的内容。当然你也可以不使用这个宏,可以直接将"__declspec(dllexport)"写在要导出的函数前面。

    第二行中的"EXTERN_C",是在"winnt.h"中定义的宏,在函数前面添加"EXTERN_C"等同于在函数前面添加extern "C",意思是该函数在编译和连接时使用C语言的方式,以保证函数名字不变。

    第二行的代码是一个函数的声明,说明该函数可以被模块外部调用,其定义实现在TestCPPDLL.cpp中,TestCPPDLL.cpp的代码如下所示:

  4.  

    第三步:

    在编译C++DLL之前,需要做以下配置,在项目属性对话框中选择"C/C++"|"Advanced",将Compile AS 选项的值改为"C++"。然后确定,并编译。

  5.  

    生成的DLL文件如下图所示:

  6.  

    第四步:

    首先,添加一个C#的应用程序,如果要在C#中调用C++的DLL文件,先要在C#的类中添加一个静态方法,并且使用DllImportAttribute对该方法进行修饰,代码如下所示:

  7.  

    DllImport中的第一个参数是指明DLL文件的位置,第二个参数"EntryPoint"用来指明对应的C/C++中的函数名称是什么。"extern"关键字表明该处声明的这个Add方法是一个外部调用。

    该方法声明完毕之后,就可以像调用一个普通的静态方法一样去使用了。

    下面是示例程序:

  8.  

    然后运行该C#程序,其结果如下图所示:

最新文章

  1. Java 单例模式详解
  2. Python之路 day2 字符串/元组/列表/字典互转
  3. angular源码分析:angular的源代码目录结构说明
  4. CentOS vsftp安装与配置
  5. 阿里云实战之二(mysql+phpmyadmin)
  6. queue 与 vector
  7. sqlserver资源下载
  8. 转: 微博的多机房部署的实践(from infoq)
  9. SVN--下载、安装VisualSVN server 服务端和 TortoiseSVN客户端
  10. 重启adb服务
  11. Web应用程序项目XXXX已配置为使用IIS。无法访问IIS元数据库。您没有足够的特权访问计算机上的IIS网站
  12. Print! Print! Print!
  13. 于Unity3D调用安卓AlertDialog
  14. Nagios显示器MySQL一个错误:NRPE: Unable to read output具体的解决过程
  15. jQuery弹出窗口完整代码
  16. Springmvc学习笔记(一)
  17. Go并发模式:管道与取消
  18. centos7下安装.net core运行时
  19. Spring Cloud Config(配置中心)
  20. APPLE-SA-2019-3-25-2 macOS Mojave 10.14.4,Security Update 2019-002 High Sierra, Security Update 2019-002 Sierra

热门文章

  1. 使用Robot类模拟鼠标、键盘事件
  2. 移动端的300ms延迟和点击穿透
  3. C++析构函数造成Debug Assertion Failed的问题
  4. linux mount命令详解(iso文件挂载)
  5. android studio项目提交Git@OSC
  6. copyout函数
  7. Windows及Linux环境搭建Redis集群
  8. Logistic回归,梯度上升算法理论详解和实现
  9. java利用SuffixFileFilter统计目录下特定后缀名文件的数目
  10. C语言预处理_05