利用C++创建DLL并C#调用
日期:2018年11月26日
环境:window 10,VS2015 community
一、利用C++创建DLL
1.新建项目;
2.打开CreateDLL.cpp文件,并输入测试代码
#include "stdafx.h" int __stdcall Add(int a, int b)
{
return a + b;
} int __stdcall Sub(int a, int b)
{
return a - b;
}
DLL Test Code
3.给工程添加一个.def文件,并在该文件中插入以下代码;
LIBRARY CreateDLL
EXPORTS
Add @,
Sub @,
def Code
注意:这里的CreateDLL是工程名如果不同则应用程序连接库时会发生连接错误!
其中LIBRARY语句说明该def文件是属于相应DLL的,EXPORTS语句下列出要导出的函数名称。我们可以在.def文件中的导出函数后加 @n,如Add@1,Sub@2,表示要导出的函数顺序号,在进行显式连时可以用到它。该DLL编译成功后,打开工程中的Debug目录,同样也会看到 CreateDLL.dll和CreateDLL.lib文件。
二、使用C#调用DLL
1.在新建的C#工程中插入以下代码;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices; namespace AcmeCollections
{
class Program
{
[DllImport(@"C:\Users\xxxxx\Desktop\study\CreateDLL\Debug\CreateDLL.dll")]//DLL的位置
public static extern int Add(int a, int b); [DllImport(@"C:\Users\xxxxx\Desktop\study\CreateDLL\Debug\CreateDLL.dll")]
public static extern int Sub(int a, int b);
static void Main(string[] args)
{
long ans;
string str; ans = Add(, );
str = Convert.ToString(ans);
Console.WriteLine(str);
ans = Sub(, );
str = Convert.ToString(ans);
Console.WriteLine(str);
Console.ReadLine();
}
}
C# Main Code
2.运行结果;
参考链接:http://www.cnblogs.com/daocaoren/archive/2012/05/30/2526495.html
利用C++创建DLL并C#调用的更多相关文章
- 在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试
from:http://m.blog.csdn.net/article/details?id=51075023 在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解 ...
- 在VS2015中用C++创建DLL并用C++调用且同一时候实现对DLL的调试
一:用C++创建DLL 依照[在VS2015中用C++编写可被其他语言调用的动态库DLL]提示创建C++编写的DLL.或參考[在VS2015中用C++创建DLL并用C#调用且同一 ...
- delphi 创建DLL文件 及其调用和注意事项
首先创建一个DLL文件,项目自带的代码为: library ProjectPnr; { Important note about DLL memory management: ShareMem mus ...
- C# 创建Dll文件供程序调用方法
C# 创建Dll文件供程序调用方法 使用C#创建动态Dll文件方法: 1. 在VS2017环境下,新建-项目-选择类库类型: 2. 新创建一个.cs文件(如test.cs),编写代码如下: usin ...
- 利用WPF创建含多种交互特性的无边框窗体
咳咳,标题一口气读下来确实有点累,让我先解释一下.另外文章底部有演示程序的下载. 本文介绍利用WPF创建一个含有以下特性的窗口: 有窗口阴影,比如QQ窗口外围只有几像素的阴影: 支持透明且无边框,为了 ...
- windows编程:创建DLL
创建DLL Dll是动态链接库的缩写,可以作为附加代码动态映射到进程的地址空间中. 动态库的一般创建方法如下 方法1.使用 __declspec(dllexport) 方式导出 一般的框架如下 // ...
- c++ 生成dll文件并调用-转
.h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分 .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll, ...
- asp.net源程序编译为dll文件并调用的实现过程
很多时候,我们需要将.cs文件单独编译成.dll文件,这就需要使用csc命令将.cs文件编译成.dll动态链接库文件.具体的操作步骤如下: 打开命令窗口->输入cmd到控制台->cd C: ...
- C#创建dll类库
类库让我们的代码可复用,我们只需要在类库中声明变量一次,就能在接下来的过程中无数次地使用,而无需在每次使用前都要声明它.这样一来,就节省了我们的内存空间.而想要在类库添加什么类,还需取决于类库要实现哪 ...
随机推荐
- 九度OJ 1020:最小长方形 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6019 解决:2849 题目描述: 给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在 ...
- 该 Bucket 已存在,或被其他用户占用
- 1000个圆点与PaintDC的使用,OnSize时重画很棒
import wx import random class View(wx.Panel): def __init__(self, parent): super(View, self).__init__ ...
- 利用Linux中的计划任务+PHP网页程序(转)
利用Linux中的计划任务+PHP网页程序,实现对web服务器运行状况的监测[每5分钟监测一次,并邮件提醒]一.我的监测服务器环境:rhel5.5+apache2.2+php5二.功能描述:写一个PH ...
- Java for LeetCode 080 Remove Duplicates from Sorted Array II
Follow up for "Remove Duplicates": What if duplicates are allowed at most twice? For examp ...
- 【Leetcode-easy】Remove Nth Node From End of List
思路1:设置两个指针p1,p2指向表头,p1先走n步.再两个指针同时走.当p1指针指到链表尾部时,P2指针已经在需要删除节点的前一位.一定要注意一些细节. class ListNode { int v ...
- 插头dp小结
插头dp: \(A:\)插头dp是什么? \(B:\)一种基于连通性状态压缩的动态规划问题 \(A:\)请问有什么应用呢? \(B:\)各种网格覆盖问题,范围允许状压解决,常用于计算方案数与联通块权值 ...
- SDUT OJ 河床
河床 Time Limit: 3000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 地理学家们经常要对一段河流进行测量分析.他们从上游开始向下游方向等距离地选择 ...
- Contiki 源码风格
/** * \defgroup coding-style Coding style * * This is how a Doxygen module is documented - start wit ...
- javascript(8)
给对象添加方法还有两种方式: 第一种: function 类名(){ this.属性; } var 对象名=new 类名(); function 函数名(){ //执行 } 对象名.属性名=函数名 ...