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

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

时间: 2024-08-02 06:43:31

C#使用CLR/C++的DLL间接调用Native C++的DLL的相关文章

C#调用非托管C++DLL的两种方法

C#编写的代码属于跨平台的托管代码,C++语言可以编写托管(managed)和非托管(native)代码.在C#与C++的混合编程中,经常会使用C#来调用native C++的DLL,下面有两种常用的调用方法供大家参考. 使用P/Invoke直接调用native C++ Dll里面的函数.(注:此方法只能调用函数,不能调用class). C#通过C++ CLR(托管的C++)来调用nativeC++ DLL, C++ CLR作为链接C#与native之间的纽带. 方法一的详细过程如下: (1)打

VC与易语言DLL互相调用方法

VC与易语言DLL互相调用方法 时间:2014-05-09 10:11来源:未知 作者:admin 点击: 4194 次 在编写程序的时候往往需要调用到别的语言编写的DLL文件,下面先来看一下在易语言中如何调用VC编写的DLL呢,首先用VC编写一个简单的DLL文件,代码如下: int WINAPI add(int x,int y) { return x+y; } 这是一个简单的两个数加法操作,返回两个数相加的结果,这里我生 在编写程序的时候往往需要调用到别的语言编写的DLL文件,下面先来看一下在

使用clr 调用C#编写的dll中的方法的全解释

使用clr 调用C#编写的dll中的方法的全解释1.数据库初始化:将下面这段代码直接在运行就可以初始化数据库了exec sp_configure 'show advanced options', '1';goreconfigure;goexec sp_configure 'clr enabled', '1'goreconfigure;exec sp_configure 'show advanced options', '1'; go ALTER DATABASE DB_Name set TRUS

C++调用C#生成的DLL文件的各种问题

C++调用C#生成的DLL文件: 首先选择建立一个C#的类库,然后再按照需求编写需要的函数 之后,对于C++调用过程需要注意的几点: 1.使用#using <....some.dll>指出DLL文件的位置来调用DLL 2.using namespace some 方便之后调用函数 3.Class1 ^c = gcnew Class1(); gcnew和new的区别(引自百度知道): gcnew返回的是一个句柄(Handle),而new返回的是实际的内存地址. gcnew创建的对象由虚拟机托管,

C++如何调用C#开发的dll

序言 本文介绍一个C++如何调用C#开发的dll实例. 前言 C++编写的程序为非托管代码,C#编写的程序为托管代码.托管代码虽然提供了其他开发平台没有的许多优势,但由于前期系统及历史版本很多使用的是非托管代码编写的程序,所以CLR提供了一些机制,允许在应用程序中同时包含托管和非托管代码.具体说分为以下三种: 托管代码能调用DLL中的非托管函数.通过P/Invoke(Platform Invoke)机制调用DLL中的函数,如Kernel32.dll等. 托管代码可以使用现有COM组件(服务器).

QT调用C#写的Dll

参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数的,是一种中间语言,需要.Net运行时进行做本地化工作,因此如果要调用C#写的dll,需要依赖.Net运行时,然而Qt中还无法直接调用.Net运行时,最好的方式是能够在Qt中直接调用C#dll的函数,但是Qt明显只能调用C++写的dll,所以就只能通过编写一个C++的dll导出接口供Qt调用,这个C++编写的dll对C#写

PB调用C#编写的DLL

C#以其简单易用,功能强大深受大家喜爱.PowerBuilder作为C/S的MIS开发工具,十分简单灵活,开发时间短,开发及维护成本低,一直是中小企业信息管理系统的首选开发工具.但是PB的局限性限制了它进一步的发展,这个就不多说了,玩PB的朋友都清楚.PB如何调用C#写的DLL,这个兴趣一上来,就忍不住要解决它.经过多方查找资料加上自己写代码测试,算是解决这个难题.下面列出开发步骤及各种设置选项(开发工具VS2008SP1+PB9.0-8836) 首先我们打开VS2008,新建一个项目,如图 接

C++ 生成 dll 和调用 dll 的方法实例(转)

1)生成dll 建立两个文件 xxx.h , xxx.cpp xxx.h内容如下: #ifdef BUILD_XXX_DLL#define EXPORT __declspec(dllexport)#else#define EXPORT __declspec(dllimport)#endif extern "C"{EXPORT void example(void);... ...} xxx.cpp内容如下: #define BUILD_XXX_DLL#include "xxx.

在UIWebView中间接调用网页中的javascript代码获得想要的值

日记和一些废话: 今天在使用webView加载网页后, 发现网页中的点击事件是用js代码实现的, 可是怎么点击都没有反应, 而且我主要是想获取到点击事件转到的url , 后来发现html中又这么一段代码: document.addEventListener('WebViewJavascriptBridgeReady', function onBridgeReady(event) function openPage(pageUrl) { if(bridge) { bridge.send(pageU