C#使用CLR/C++的DLL间接调用Native C++的DLL

开发环境:win 7  VS2010

简介:C#的exe使用CLR/C++间接调用Native C++的DLL.

第一步:创建一个C#的Console Application工程-->命名“ConsoleApplication1”。

第二步:创建一个CLR/C++的工程,右击“ConsoleApplication1”上面的“Solution 'ConsoleApplication1'”-->Add-->NewProject-->CLR-->Class Library -->命名“NetCpp”。

第三步:创建一个Native C++工程,同上,右击-->Add --> NewProject -->Win32 -->Win32 Project

-->命名“NativeCpp”-->Next-->选择"DLL"-->Export symbols.

以上创建三个工程,下面开始编写代码与设置环境:

第四步:打开"NativeCpp.h"在其中加入一些成员函数与变量;

#define NATIVECPP_API __declspec(dllexport)

// This class is exported from the NativeCpp.dll

class NATIVECPP_API CNativeCpp {

public:

CNativeCpp(void);

// TODO: add your methods here.

int getA()

{

return 20;

}

};

第五步:在NetCpp工程中引用NativeCpp的DLL;

右击NetCpp工程-->Properties

第六步:打开CLR/C++工程的"NetCpp.h",加入#include "NativeCpp.h"

#include "NativeCpp.h"

using namespace System;

namespace NetCpp {

public ref class Class1

{public:

int getB()

{

CNativeCpp a;

return a.getA();

}

};

}

第七步:右击ConsoleApplication1工程的References-->Add Reference-->Projects-->选择"NetCpp"

再把Native C++产生的DLL复制到C#工程的bin\\Debug\\目录下.(若想在修改了NativeC++代码后动态的更新Native C++的DLL,需要在C#工程的属性中设置:PropertiesàBuild EventsàPost-build event command line:写入命令:copy  $(SolutionDir)Debug\NativeCpp.dll   $(TargetDir)    )

第八步:打开ConsoleApplication1工程program.cs。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

NetCpp.Class1 cl = new NetCpp.Class1();

Console.WriteLine("getA()" + c1.getB().ToString());

Console.Read();

}

}

}

原文地址:http://blog.sina.com.cn/s/blog_a50d2d7401018rxr.html

转载于:https://www.cnblogs.com/heyunxu/p/6480815.html

C#使用CLR/C++的DLL间接调用Native C++的DLL相关推荐

  1. pb调用c语言dll,PB调用C#编写的Dll类库

    在c# 中编写com组件,供PB调用实例 前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#写dll时要注意. c#中新建类库 类库类型为通用类库,项目名为AddC ...

  2. C#调用非托管C++DLL:通过托管C++DLL间接调用

    现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额.因此很多以前搞VC++开发的人都转向用更强大的VS.Net.在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类 ...

  3. java调用c写的dll jna_jna调用c编写的dll

    我们团队目前开发的产品是用java语言编写的,大家都知道,java编写的代码随便都可以被反编译,导致别人可能会看到你"裸奔"的样子.所以,为了避免这种安全隐患,团队最终商定,将部分 ...

  4. C#调用非托管C++DLL:直接调用法

    在实际软件开发过程中,由于公司使用了多种语言开发,在C#中可能需要实现某个功能,而该功能可能用其他语言已经实现了,那么我们可以调用其他语言写好的模块吗?还有就是,由于C#开发好的项目,我们可以利用re ...

  5. c 调用易语言dll字节集,总结VC与易语言DLL互相调用的方法

    在编写程序的时候往往需要调用到别的语言编写的DLL文件,下面先来看一下在易语言中如何调用VC编写的DLL呢,首先用VC编写一个简单的DLL文件,代码如下: int WINAPI add(int x,i ...

  6. 怎么多次调用c语言dll,c-如何从注入到同一程序的另一个.dll中调用...

    在过去,我们使用CreateRemoteThread并将LoadLibraryA用作lpStartAddress的地址(该地址在所有进程中都相同).诀窍是使用VirtualAllocEx分配要注入的D ...

  7. 易语言如何调用c dll文件,易语言调用C++写的DLL

    直接调用会弹出堆栈错误的信息,原因是VS默认是__cdcel方式,而易语言是__stdcall,所以调用约定不一致导致堆栈错误. 解决方案很简单,易语言声明DLL函数时"在库中对应命令名&q ...

  8. QT调用C#写的Dll

    QT调用C#写的Dll 参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数 ...

  9. QT调用C++写的Dll

    C#写的dll是没有dllMain入口函数的,是一种中间语言,需要.Net运行时进行做本地化工作,因此如果要调用C#写的dll,需要依赖.Net运行时,然而Qt中还无法直接调用.Net运行时,最好的方 ...

最新文章

  1. windows下sqlite3的基本操作
  2. Linux系统无线鼠标不能用,手把手教你win7系统无线鼠标不能用的处理方案
  3. http get 传参最大长度介绍
  4. Spring boot自动配置使用
  5. java入门第六天课程_Java基础知识——第六天
  6. 王爽汇编第二册:将每个单词的前四位改为大写字母
  7. 作者:钱卫宁(1976-),男,华东师范大学计算机科学与软件工程学院教授、博士生导师。...
  8. 快速傅立叶变换(FFT)的海面模拟
  9. Google Maps 补丁绕过、得双倍奖金这么简单?我陷入了自我怀疑
  10. 此流上不支持超时。_10分钟了解线程池,阿里再也不担心我线程池资源耗尽了...
  11. SQL数据库连接超时时间已到
  12. (全程图解)Axure RP8.0安装、破解、汉化教程
  13. Maven-仓库概念,下载与配置
  14. fc坦克大战游戏完美复刻
  15. 台式计算机打印机共享,电脑不能共享打印机怎么办 电脑设置共享打印机详细教程...
  16. Active: inactive (dead)
  17. sql UPDATE的时候可以使用join吗
  18. ologit 平行线检验 brant踩坑历程not all independent variables can be retained in binary logits brant test cann
  19. 两张(多张)图片合成一张图片
  20. PMBOK(第六版) 学习笔记 ——《第一章 引论》

热门文章

  1. python polar函数_Python可视化很简单,可是你会吗?python绘制饼图、极线图和气泡图,让我来教教你吧,一文教会!!!...
  2. java usb 无驱打印_Windows Usb 无驱动打印
  3. 图片资源 php,php URL图片资源传参生成对应尺寸图片
  4. android json 解析图片,JSON解析并获取android中的图像
  5. 算法转换c语言程序,(转)C语言实现卡尔曼滤波算法程序
  6. 软件可靠性指标mtbf测试评估,软件可靠性评估.pdf
  7. 背包问题 小灰_小背包问题
  8. observable_Java Observable countObservers()方法与示例
  9. js数字最多保留两位小数_8085微处理器中最多两个8位数字
  10. Python---利用蒙特.卡罗方法计算圆周率近似值