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
C#使用CLR/C++的DLL间接调用Native C++的DLL的更多相关文章
- 使用clr 调用C#编写的dll中的方法的全解释
使用clr 调用C#编写的dll中的方法的全解释1.数据库初始化:将下面这段代码直接在运行就可以初始化数据库了exec sp_configure 'show advanced options', '1 ...
- C++如何调用C#开发的dll
序言 本文介绍一个C++如何调用C#开发的dll实例. 前言 C++编写的程序为非托管代码,C#编写的程序为托管代码.托管代码虽然提供了其他开发平台没有的许多优势,但由于前期系统及历史版本很多使用的是 ...
- C#动态调用C++编写的DLL函数
C#动态调用C++编写的DLL函数 动态加载DLL需要使用Windows API函数:LoadLibrary.GetProcAddress以及FreeLibrary.我们可以使用DllImport在C ...
- C++调用C#生成的DLL文件的各种问题
C++调用C#生成的DLL文件: 首先选择建立一个C#的类库,然后再按照需求编写需要的函数 之后,对于C++调用过程需要注意的几点: 1.使用#using <....some.dll>指出 ...
- windows RT开发笔记:WinRT DLL及其调用研究
一. 几个概念: WinRT : Windows Runtime, windows运行时.创建Windows运行时(WinRT)是为了在Windows上给用户提供一种流畅且安全的应用体验.WinRT会 ...
- QT调用C#写的Dll
参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数的,是一种中间语言,需要 ...
- C#调用C++编写的DLL函数, 以及各种类型的参数传递 (转载)
C#调用C++编写的DLL函数, 以及各种类型的参数传递 1. 如果函数只有传入参数,比如: C/C++ Code Copy Code To Clipboard //C++中的输出函数 int ...
- c++ c# java 调用 c++ 写的dll
1. vs 中新建win32 dll 项目 testdll 添加实现文件 test.cpp #include "stdafx.h" #include <ios ...
- Spring.net 间接调用被AOP拦截的方法失效(无法进入aop的拦截方法)
.下面的tx要定义 <objects xmlns="http://www.springframework.net" xmlns:db="http://www.spr ...
随机推荐
- Linux用户和权限
用户和用户组管理 linux使用用户和组来限制资源的使用. 在linux上运行任何程序或命令都要以一个具体的用户来运行,这个用户的权限决定了相应的程序能访问的资源和能执行的操作. 用户相关命令 组是用 ...
- python的内存分配
一.前言 大多数编译型语言,变量在使用前必须先声明,其中C语言更加苛刻:变量声明必须位于代码块最开始,且在任何其他语句之前.其他语言,想C++和java,允许“随时随地”声明变量,比如,变量声明可以在 ...
- Spring AOP APIS
1:Pointcut API in Spring (1):切点接口定义 org.springframework.aop.Pointcut接口是中心接口.用来将Advice(通知)定位到特定的类和方法. ...
- python常用数据结构(2)
1.有名字的元组——namedtuple >>> from collections import namedtuple >>> Point = namedtuple ...
- 浅谈Java中的命名规范
现代软件架构的复杂性需要协同开发完成,如何高效地协同呢? 答案是:制定一整套统一的规范. 无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全,试想如果没 ...
- Scala 学习之路(一)—— Scala简介及开发环境配置
一.Scala简介 1.1 概念 Scala全称为Scalable Language,即“可伸缩的语言”,之所以这样命名,是因为它的设计目标是希望伴随着用户的需求一起成长.Scala是一门综合了面向对 ...
- iOS开发(5):设备唯一标识与全局变量
这里记录两个iOS开发中经常用到的知识点,一个是唯一标识,一个是全局变量. (1)唯一标识 唯一标识一台设备(比如iPhone.iPad等)是一个基本的实现与业务上的需求,因为这个唯一标识在许多场景都 ...
- java里字节与字符的区别
当时学Java的时候没搞懂字节和字符的区别,今天看文件输入输出流的时候觉得是时候彻底把这两个概念弄懂. 首先得知道byte的概念和作用: byte即字节的意思,是java中的基本数据类型,用来申明字节 ...
- Python向FTP服务器上传文件
上传 代码示例: #!/usr/bin/python # -*- coding:utf-8 -*- from ftplib import FTP ftp = FTP() # 打开调试级别2, 显示详细 ...
- resolv.conf 的超时(timeout)与重试(attempts)机制
/etc/resolv.conf 有两个默认的值至关重要,一个是超时的 timeout,一个是重试的 attempts,默认情况下,前者是 5s 后者是 2 次.这个估计很多工程师都不是很在意,一般情 ...