闲暇之余,记一下笔记!记录一下c#如何调用C++的动态库(dll).

步骤:

一、创建一个C++类,例如:

AddOperate.h

extern _declspec(dllexport) int Sum(int a, int b);
class AddOperate
{
public :
};

AddOperate.cpp

#include "AddOperate.h"
#include "iostream"
using namespace std; int Sum(int a, int b)
{
if (a - (int)a != || b - (int)b != ) {
cout << "请输入整数" << endl;
return -;
}
return a + b;
}

2、将C++代码编译成动态库dll

需要设置编译配置:
A:项目--属性---赔指数型--常规---配置类型---动态库(.dll)

B:项目--属性--配置属性--C/C++---高级---编译为---便以为C++代码(/TP)

这个活动X64注意,调用放C#最好也用这个X64;

然后点击项目--生成,就会看到dll了;

3、将dll拷贝到c#项目输入目录,一般在bin/debug下面;

4、编写C#代码调用dll

 [DllImport("Calculate.dll", CallingConvention = CallingConvention.Cdecl)]
extern static int Sum(int a, int b);
public static void Main(string[] args) {
try {
Console.WriteLine("请输入NumberA:");
int numberA = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入NumberB:");
int numberB = Convert.ToInt32(Console.ReadLine()); Console.WriteLine($"the numberA is:{numberA};numberB is:{numberB},The Sum is:{Sum(numberA, numberB)}"); }
catch(Exception ex) {
Console.WriteLine($"ex:{ex}");
} Console.ReadLine();
}

主要是这两行:

这个“Sum”方法必须跟dll方法名字相同,否则找不到;

接下来看看运行结果:

很尴尬,提示找不到“Sum”方法,难道我们的操作有问题。

排查了很久,发现C++方法编译成dll时,方法名会改变,也是为了安全;

解决方案:

要把C++代码转化成C语言!

就这样,然后再编译dll过来,再次执行:

结果:成功

五、其他可能遇到的问题

A:对PInvoke函数的调用导致堆栈不对称问题

  方法定义加:CallingConvention = CallingConvention.Cdecl

B:未处理System.BadImageFormatException,试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

就这样OK了!。

六:思考:如果这个dll中有多个方法需要调用,

该怎么办,是否是这样,一个个声明引用??

预知结果,请看下一篇文章:《C#如何调用C++(进阶篇)》,地址:https://www.cnblogs.com/skyfreedom/p/11783629.html

C#如何调用C++(基础篇)的更多相关文章

  1. C#多线程之基础篇2

    在上一篇C#多线程之基础篇1中,我们主要讲述了如何创建线程.中止线程.线程等待以及终止线程的相关知识,在本篇中我们继续讲述有关线程的一些知识. 五.确定线程的状态 在这一节中,我们将讲述如何查看一个线 ...

  2. C#多线程之基础篇1

    在多线程这一系列文章中,我们将讲述C#语言中多线程的相关知识,在多线程(基础篇)中我们将学习以下知识点: 创建线程 中止线程 线程等待 终止线程 确定线程的状态 线程优先级 前台线程和后台线程 向线程 ...

  3. iOS系列 基础篇 03 探究应用生命周期

    iOS系列 基础篇 03 探究应用生命周期 目录: 1. 非运行状态 - 应用启动场景 2. 点击Home键 - 应用退出场景 3. 挂起重新运行场景 4. 内存清除 - 应用终止场景 5. 结尾 本 ...

  4. iOS系列 基础篇 04 探究视图生命周期

    iOS系列 基础篇 04 探究视图生命周期 视图是应用的一个重要的组成部份,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 以视图的四种状态为基础,我们来系统了解一下视 ...

  5. iOS系列 基础篇 08 文本与键盘

    iOS系列 基础篇 08 文本与键盘 目录: 1. 扯扯犊子 2. TextField 3. TextView 4. 键盘的打开和关闭 5. 打开/关闭键盘的通知 6. 键盘的种类 7. 最后再扯两句 ...

  6. [译]RxJS 5.X基础篇

    欢迎指错与讨论 : ) 当前RxJS版本:5.0.0-beta.10.更详细的内容尽在RxJS官网http://reactivex.io/rxjs/manual/overview.html.文章比较长 ...

  7. iOS10 推送必看(基础篇)

    虽然这篇文章比较长,也不好理解,但是还是建议大家收藏,以后用到的时候,可以看看,有耐心的还是读一读. 这篇文章开始,我会跟大家好好讲讲,苹果新发布的iOS10的所有通知类. 一.创建本地通知事例详解: ...

  8. [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析

    [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...

  9. oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器

      PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语 ...

随机推荐

  1. https://en.wikipedia.org/wiki/Green_threads

    https://en.wikipedia.org/wiki/Green_threads

  2. mp4文件格式解析(转)

    mp4文件格式解析 MP4文件格式带数据详解 MP4文件格式的解析,以及MP4文件的分割算法

  3. phpstorm设置最多标签数

    在settings=>Editor=>General=>Editor Tabs的Tab limit下可以设置当前窗口能够打开的最多标签数目,默认是10,超过设定值时,会自动关闭前面的 ...

  4. LC 516. Longest Palindromic Subsequence

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...

  5. angular中的动态路由

    1.配置动态路由 const routes: Routes = [ {path: 'home', component: HomeComponent}, {path: 'news', component ...

  6. 004-nginx简介、安装配置【源码安装和mac安装】、基本使用

    一.概述 1.1.Nginx是什么 Nginx是一款轻量级的Web服务器,也是一款轻量级的反向代理服务器[常用]. 1.2.Nginx能干什么 Nginx能干的事情很多,这里简要罗列一些: 1:直接支 ...

  7. java生成RSA公私钥字符串,简单易懂

    java生成RSA公私钥字符串,简单易懂   解决方法: 1.下载bcprov-jdk16-140.jar包,参考:http://www.yayihouse.com/yayishuwu/chapter ...

  8. APP手工项目02-用例编写-测试报告-fiddler弱网测试

    回顾 APP专项测试(兼容性,安装,卸载,升级,交叉事件,PUSH消息,性能,其他类型) 项目环境(开发环境,测试环境,准生产环境,生产环境) APP内测发布平台(蒲公英,fir.im)支持apk,i ...

  9. C#如何控制panel加载的字窗体中控件的位置随着显示器分辨率大小而改变

    System.Windows.Forms.Screen   screen=Screen.PrimaryScreen;     System.Drawing.Rectangle   rct=screen ...

  10. 最新javascript自动按比例显示图片,按比例压缩图片显示

    最新javascript自动按比例显示图片,按比例压缩图片显示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...