程序C++ to C#交互

第一次用C#调用C/C++生成的DLL文件,感觉有点新鲜,事实上仅仅是实现了执行在公共语言执行库 (CLR) 的控制之外的“非托管代码”(执行在公共语言执行库(CLR)的控制之中的代码码称为“托管代码“)的东西,如何运用在托管下的非托管呢?如今给感兴趣的刚開始学习的人简单地写一个实现的全过程吧(有什么问题千万别笑):

1.用VS2008选择其他语言(C++)创建一个控制台应用程序命名为Mydll1,然后选择应用程序类型为DLL,确定

 项目如图:

 

在头文件 stdafx.h 下加入例如以下声明:

#define LIBEXPORT_API extern "C" __declspec(dllexport)

LIBEXPORT_API int Add(int a, int b);

在MyDll.cpp中实现这个函数:

#include "stdafx.h"

int Add(int a,int b)

{

return a+b;

}

注意假设实现的方法是声明在其他头文件里的,一定要 加#include "xxx.h" 来引用这个声明了这个函数头文件。

生成MyDll.dll和MyDll.lib。

2.在Visual C# .net中引用dll文件

新建Visual C#控制台应用程序命名为TestImportDll;

将MyDll.dll和MyDll.lib复制到可运行文件文件夹下(如图):

在Praogram.cs中加入引用using System.Runtime.InteropServices;

按例如以下方式声明一个将要引用MyDll.dll中函数的类:

  

class test

{

//[DllImport("..\\..\\lib\\CppDemo.dll")]

//public static extern void Function();

//[DllImport("..\\..\\lib\\CppDemo.dll")]

//public static extern int Add(int i, int j);

[DllImport("..\\..\\Lib\\Mydll1.dll")]

public static extern int Add(int a, int b);

}

 最后在Main函数中调用这个类输出结果:

static void Main(string[] args)

{

Console.WriteLine("result: " + test.Add(2, 3).ToString());

Console.ReadLine();

}

以下是Program.cs的代码:

END(如图):

时间: 2024-10-13 16:17:42

程序C++ to C#交互的相关文章

你真的深入理解计算机系统了吗之篇章一:程序与系统的交互

随着计算机的发展以及高级编程语言的出现,应用程序不仅仅要与硬件打交道,还要借助于一些系统的服务,这些系统不仅仅包括操作系统还有编译系统等,我们分别来介绍应用程序是如何与这些系统打交道的. 首先来看程序与编译系统的交互.如今的程序代码规模越来越大,将所有代码都写在一个文件中已经变得不切实际,因此通常将代码按照功能划分到不同的文件中.当一个高级语言写的程序要想能被处理器执行,那它首先要被编译系统的编译器编译为二进制形式的文件,即可重定位目标文件,其次编译系统的链接器还必须将这些可重定位目标文件链接成

Windows 10 IoT Serials 5 - 如何为树莓派应用程序添加语音识别与交互功能

都说语音是人机交互的重要手段,虽然个人觉得在大庭广众之下,对着手机发号施令会显得有些尴尬.但是在资源受限的物联网应用场景下(无法外接鼠标键盘显示器),如果能够通过语音来控制设备,与设备进行交互,那还是很实用的.继上一篇<Windows 10 IoT Serials 4 - 如何在树莓派上使用Cortana语音助手>之后,本文将详细讲述如何为运行Windows 10 IoT Core系统的树莓派添加语音识别和语音交互功能. 1. 硬件准备 树莓派2/树莓派3.5V/2A电源.TF卡(8GB以上)

微信小程序之上传下载交互api

wx.request(OBJECT) OBJECT参数说明: 参数名 类型 必填 说明 url String 是 开发者服务器接口地址 data Object.String 否 请求的参数 header Object 否 设置请求的 header , header 中不能设置 Referer method String 否 默认为 GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT dataType String 否 默认为

程序猿必看交互设计

本文作者 Pasquale D'Silva 是 Elepath 的一位交互设计师兼产品设计师,在本文中,他从交互的角度阐释了优秀的设计应该具有的一些品质,或者说,优秀的产品该如何实现与用户的自然沟通. 不得不说,有太多程序猿或者美工(注意,是美工,真正的设计师不会这么干)误把技术当艺术.把漂亮当设计了,真正重要的交互部分反而被忽略,你可以看看,一大批的产品都是近乎静态的,许多操作诡异至极,诸如你想添加一个条目到列表里,它就生硬的出现在那;你想删除,它就直接消失.这样的产品经理,你们到底有没有考虑

使用ContentProvider进行应用程序间的数据交互

什么是ContentProvider: ContentProvider用来管理数据的访问规则.它允许你的应用程序向外界暴露需要被访问的数据. 是Android的四大组件之一. ContentProviders支持四种基本的操作,即我们平时所见到的CRUD操作(增删改查).Android系统 本身已经提供了一些内容提供者,它们允许我们查询联系人,媒体库,和短息消息等. 基于Content Uri的查询: 没有Uri,ContentProvider 类基本无法工作,就像我们上网没有网址.当我们要上网

微信小程序实战,与后台交互

index.wxml <view class="container"> <text>{{txt}}</text> <input name="name" type="text" id='text' bindchange="xyz"/> <button id="btn" bindtap="abc" >提交</button>

触发时,文本出现颜色。事件是黏合应用程序中所有用户交互的胶水。DOM和事件的是JavaScript中的黄金搭档

<html> <head> <title>demo</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> /* 示例操作DOM元素 */ window.onload = function(){ //给Dom元素添

浅析Java web程序之客户端和应用服务器端交互原理

最近一直在思考一个问题,为什么在用struts框架开发的时候FormBean都需要序列化,即实现java.io.Serializable接口,本着勤学好问的精神我Google了下对象序列化方面的文章,虽然大体了解了怎么做,但是还是没有搞清楚为什么要这样做:最后我想解决一个问题要找问题的根源和本质,于是从web程序客户端和服务器端交互的原理入手,终于找到了我要的答案. 1. 对象序列化是什么东东? 简单地说,Java对象列化就是要把内存中的Java对象保存下来(持久化),以便可以在网络上传输或今后

你真的深入理解计算机系统了吗之篇章二------程序与程序的交互

在上一篇章中我们主要学习了一个独立的程序是如何在系统上运行的,可是我们在实际编写程序的时候,会发现程序有时还要与IO设备或者别的程序交互和通信.这一篇章主要来学习程序与IO设备交互的知识. 程序与IO设备的交互是经常可以见到的,比如与磁盘.键盘.网络的交互.UNIX系统设计中一切皆文件的思想,因此所有的IO设备都被模型化为文件.这种思想使得我们在读写文件的时候可以忽略文件的底层机制,只用read.write函数即可对所有不同类型的文件来进行读取.在UNIX系统级要想读写文件中的内容,那么open