在一个解决方案中用C#测试调用C++ DLL
VS2015,在解决方案中新建一个C++ DLL项目,一个C# Winform项目;
dllmain.cpp;
#include "stdafx.h"BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;
}
这个是自动生成;case DLL_xxxx_xxxx,这几个是DLL消息;
stdafx头文件和C文件不用管;
DllTest2.cpp里面添加3个函数;
#include "stdafx.h"
#include "DllTest2.h"
#include <string.h>DllTest2_API int __stdcall Add(int a, int b)
{return a + b;
}DllTest2_API int __stdcall Multitwo(int a, int b)
{return a * b;
}DllTest2_API char __stdcall getc1(char c1)
{return c1;
}
DllTest2.h里面为三个函数添加导出说明;说明此dll导出的3个函数;
#define DllTest2_API __declspec(dllexport)
EXTERN_C DllTest2_API int __stdcall Add(int a, int b);EXTERN_C DllTest2_API int __stdcall Multitwo(int a, int b);EXTERN_C DllTest2_API char __stdcall getc1(char c1);
C#项目进行调用测试;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;namespace test2
{public partial class Form1 : Form{[DllImport(@"G:\xxxx\VCWorkspace\DllTest2\Debug\DllTest2.dll")]extern static int Add(int a, int b);[DllImport(@"G:\xxxx\VCWorkspace\DllTest2\Debug\DllTest2.dll")]extern static int Multitwo(int a, int b);[DllImport(@"G:\xxxx\VCWorkspace\DllTest2\Debug\DllTest2.dll")]extern static char getc1(char c1);public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){int c = Add(100, 67);textBox1.Text = textBox1.Text + c.ToString() + Environment.NewLine;textBox1.Text += Environment.NewLine;}private void button2_Click(object sender, EventArgs e){int c = Multitwo(99, 7);textBox1.Text = textBox1.Text + c.ToString() + Environment.NewLine;textBox1.Text += Environment.NewLine;}private void button3_Click(object sender, EventArgs e) //char 测试{char c1 = 'f';char d1 = getc1(c1);textBox1.Text = textBox1.Text + d1 + Environment.NewLine;textBox1.Text += Environment.NewLine;}}
}
生成解决方案;此处C#调用写的是DLL生成的绝对路径;C#不用引用DLL项目;每次修改了dll代码,重新生成解决方案;
启动C#项目;可以测试调用C++ DLL了;
在一个解决方案中用C#测试调用C++ DLL相关推荐
- C# 调用C++ dll 返回char*调用方式(StringBuilder乱码)
// CDLLDemo.cpp : 定义 DLL 应用程序的导出函数. // #include "stdafx.h" #include "string.h" # ...
- electron通过edge-js调用TSCLIB.dll 打印卡白屏或退出的解决方案
软件版本: 阅读坑记需谨慎,版本要看仔细. "node":"v14.16.0", "electron": "^13.0.0&quo ...
- C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针
C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针 在这个系列的"C#调用C++DLL的小总结6---C++Dll中指针的释放问题 "中曾经详细说过类似的问 ...
- c#调用c语言的自定义函数,[转]在C#中调用C语言函数(静态调用Native DLL,Windows Microsoft.Net平台)...
对于不太了解.Net的人,如果想要了解.Net,我必须给他介绍P/Invoke.P/Invoke是什么呢?简单地说,就是在.Net中调用本地代码(Native code)的一种解决方案.所谓" ...
- c#利用SWIG调用c++dll学习总结【转】
开发环境: 操作系统:windows 7 IDE:Microsoft Visual Studio Professional 2015 SWIG: 3.0.12 swig的介绍 详细介绍可看官网,一下贴 ...
- VC MFC C++ MQTT VC编译MQTT VC调用MQTT dll eclipse-paho-mqtt
VC MFC C++ MQTT VC编译MQTT VC调用MQTT dll eclipse-paho-mqtt JS HTML Web端使用MQTT通讯测试 Android Studio MQTT 使 ...
- 易语言如何调用c dll文件,易语言调用C++写的DLL
直接调用会弹出堆栈错误的信息,原因是VS默认是__cdcel方式,而易语言是__stdcall,所以调用约定不一致导致堆栈错误. 解决方案很简单,易语言声明DLL函数时"在库中对应命令名&q ...
- Electron-vue开发桌面应用调用TSCLIB.dll(tsc标签打印机连接库)
最新,最终解决方案http://t.csdn.cn/szQRy 原因:要做个防伪标签打印软件,打印数据是来自服务器.最开始用的是JavaScript调用TSC来做打印(只能用IE浏览器,使用人员总会无 ...
- C#调用C++DLL类的方法
C++的优势在于高效灵活,C#的优势在于简单易用,两者结合起来对项目开发来说是件好事,而且C++不容易反编译,也保障了代码的安全性,如果一些核心算法使用C#编写,那么保密就是一个问题. C++ ...
最新文章
- openstack对接华为存储
- 李洪强漫谈iOS开发[C语言-038]-if else if语句
- java aio聊天_JAVA aio简单使用
- 创下新的纪录 京东618累计下单金额超3438亿元
- Node开发知识概括
- python进阶12并发之八多线程与数据同步
- 腾讯社招 —— 应用宝后端工程师-电话面试
- 程序员的世界有 10 种人,你是哪一种?
- 从雅迪赞助FIFA世界杯透视体育营销趋势
- G415,到了徐州,车厢空了
- Python]网络爬虫
- esp8266开发入门教程(基于Arduino)——环境安装
- MariaDB 安装与启动 使用MySQL
- 企业上云是什么意思?企业上云的好处是什么?
- 斐讯音箱控制扫地机器人_斐讯大能X3扫地机器人首批测试,这回真没花一分钱!...
- 设计模式-2-抽象工厂方法
- 变形菌门扩张——肠道微生态失调和炎症肠病的潜在特征
- 高等组合学笔记(三): 间隔排列,投票问题,圈集排列组合与生成函数简介
- SIM7600CE GSM/UMTS/LTE天线设计指南
- 使用STL给选手打分