C#Stimulator项目>>>C/C++ DLL的生成和调用,Windows下的多线程
Windows下的多线程
http://blog.csdn.net/ganpengjin1/article/category/2541791
使用C/C++建立DLL,环境VS2013
新建Win32工程,下一步,类型选择DLL
选中导出符号。不选空项目,让系统生成所需文件。
为了生成和使用的项目使用同一组头文件,一般使用这样的:
#ifdef MYLIB_EXPORTS
#define MYLIB_API __declspec(dllexport)
#else
#define MYLIB_API __declspec(dllimport)
#endif
MYLIB_API的位置:在class 后面,类名的前面
对于函数,申明和实现,在返回类型前面
对于全局变量,在extern后面,在变量类型前面。
DLL中使用回调函数。
在头文件中申明,比如 typedef void (CALLBACK *yourfn)(int para);
在CPP中,一个初始化函数接受yourfn类型的函数指针
比如 :init(yourfn fn)
{
......
fn();//调用fn
}
外部模块调用DLL的时候,需要写一个类似yourfn的函数,
void myfn(int hi){......}
然后调用init(myfn);
C#调用DLL中的C函数
建立一个static类,
using System.Runtime.InteropServices;
调用形式
或者这样的:
[DllImport("dlldemo.dll", EntryPoint = "PassString", CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall, ExactSpelling = true)]
public static extern int PassString(string msg); [DllImport("dlldemo.dll", EntryPoint = "Power", CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall, ExactSpelling = true)]
public static extern double Power(double x, int y);
在C#修饰符 ref 即表示“传址”,所以C++中的 int*对应于 C#中的ref int
传递数组:
在C++中添加函数
这样调用
C#调用DLL中C 回调函数
如果dll需要一个函数指针作为参数,你可以把一个c#的委托传给它,注意参数返回值对应就行
C#在调用时需要将委托声明为静态的类成员变量。因为委托是托管代码,会被垃圾回收机制回收,
如果该回调需要数组传参数,还需注意:
public delegate void CallbackDelegate([marshalAs(UnmanagedType.LPArray,SizeConst=8010)]byte[] buffer,int count);
C#Stimulator项目>>>C/C++ DLL的生成和调用,Windows下的多线程的更多相关文章
- Python调用windows下DLL详解
Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...
- Golang调用windows下的dll动态库中的函数
Golang调用windows下的dll动态库中的函数 使用syscall调用. package main import ( "fmt" "syscall" & ...
- Golang调用windows下的dll动态库中的函数 Golang 编译成 DLL 文件
Golang调用windows下的dll动态库中的函数 package main import ( "fmt" "syscall" "time&quo ...
- Delphi 使用之dll文件生成与调用
DLL是Dynamic-Link Libraries(动态链接库)的缩写,库里面是一些可执行的模块以及资源(如位图.图标等).可以认为DLL和EXE基本上是一回事,只是DLL不能直接执行,而必须由应用 ...
- Python调用windows下DLL详解 - ctypes库的使用
在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分数据的交互.使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件),下面将详 ...
- windows下安装node.js及环境配置、部署项目
windows下安装node.js及环境配置.部署项目 一.总结 一句话总结: 安装nodejs软件:就像普普通通的的软件那样安装 配置nodejs安装的全局模块的环境变量 并且安装cnpm(比如cn ...
- C/C++ 关于生成静态库(lib)/动态库(dll)文件如何使用(基于windows基础篇)
1. 首先,如何制作一个静态库(lib)? 额, 对于静态库,我们知道,里头是不应该有Main函数,它只是一个配合文件.之所以称之为lib静态库,其实就是指,我们需要用到lib里头的函数时,我们才会去 ...
- [转] lib和dll 区别,生成及使用方法
lib 和 dll 的区别.生成以及使用详解 [目录] lib dll介绍 生成动态库 调用动态库 生成静态库 调用静态库 首先介绍一下静态库(静态链接库).动态库(动态链接库)的概念,首先两者都是代 ...
- windows下利用dll生成lib
原来工程编译的一些dll库,这次项目需要静态库,偷懒想直接转化.看到网上一些教程,使用VC工具和建立lib项目来实现.有点麻烦.还有一种方法,仅仅利用工具和几条命令转化.来试试看.文章参考harrie ...
随机推荐
- php简简单单搞定中英文混排字符串截取,只需2行代码!
提到中英文混排计数.截取,大家首先想到的是ascii.16进制.正则匹配.循环计数. 今天我给大家分享的是php的mb扩展,教你如何轻松处理字符串. 先给大家介绍用到的函数: mb_strwidth( ...
- openssl Mac编译小记
1. 下载openssl包 2. 解压 3. 打开控制台, 进入包目录, 执行 ./Configure darwin64-x86_64-cc 4. make 5. 得到 libcrypto.a lib ...
- 数据添加到DataTable
DataTable tblDatas = new DataTable("Datas"); DataColumn dc = null; ...
- jedis源码阅读
package redis.clients.jedis; import java.util.ArrayList; import java.util.HashSet; import java.util. ...
- SQL Express几个版本的区别
对于这三个文件:SQLEXPR32_x86_CHS.exe.SQLEXPR_x86_CHS.exe. SQLEXPR_x64_CHS.exe,大家一看就知道是sqlserver的express版本,但 ...
- 【技术贴】解决Mysql启动服务报错1067 进程意外终止
无法启动MYSQL服务错误1067 进程意外终止. 我使用2013-10-25_appserv-win32-2.6.0.exe安装的MySql,结果服务起不来. 于是细心机智的我发现,在F:\stud ...
- Ubuntu配置apache
http://blog.csdn.net/ljchlx/article/details/21978431 http://www.2cto.com/os/201110/107283.html
- 移动应用产品开发-android开发(三)
历时一个多月的时间,这款APP算是开发完成了,最近在测试完善中,比较空闲好好总结下. 之前两次已经提到开发过程中的主要的知识点,这次主要总结下解决问题方法,http请求和安全. 首先讲下解决问题的方法 ...
- 【UVA 1151】 Buy or Build (有某些特别的东东的最小生成树)
[题意] 平面上有n个点(1<=N<=1000),你的任务是让所有n个点连通,为此,你可以新建一些边,费用等于两个端点的欧几里得距离的平方. 另外还有q(0<=q<=8)个套餐 ...
- [topcoder]NinePuzzle
http://community.topcoder.com/stat?c=problem_statement&pm=11225&rd=14427 http://apps.topcode ...