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 ...
随机推荐
- CSS3之简易的3D模型构建[原创开源]
CSS3之简易的3D模型构建[开源分享] 先上一张图(成果图):这个是使用 3D建模空间[源码之一] 制作出来的模型之一 当然这是一部分模型特写, 之前还制作过枪的3D模型等等. 感兴趣的朋友可以自己 ...
- GitHub命令精简教程
Github其实也可以作为文件分享的地方,但是免费空间只有300M,所以不能存放大文件,否则可以成为一个分享资源的下载站,而且非常方便. 常用命令: git add . //添加所有的文件到索引 ...
- css中 中文字体(font-family)的标准英文名称
Mac OS的一些: 华文细黑:STHeiti Light [STXihei] 华文黑体:STHeiti 华文楷体:STKaiti 华文宋体:STSong 华文仿宋:STFangsong 儷黑 Pro ...
- python 函数1
一.背景 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下 ...
- odoo 使用 80 端口
OE安装好,一般需要通过 8069端口来访问. 1:Aapche2 安装 sudo apt-get install apache2 2.安装mod_proxy cd /etc/apache2/mods ...
- WPF窗体置于桌面最底层
在WPF中设置窗体的Topmost属性可以将窗体永远置于顶部,但是没有提供Bottommost属性将窗体置底.若果要将窗体置于桌面的最底部,就需要使用Windows API来实现了.解决方案如下: 1 ...
- Java String.contains()方法(转载)
Java String.contains()方法 Java String.contains()方法用法实例教程, 返回true,当且仅当此字符串包含指定的char值序列 描述 java.lang.St ...
- DM8168 解码显示模块代码阅读分析
解码/显示概述:从共享文件夹获取H264流,对264流进行解析,生成hdr文件,hdr文件中包含每一帧的信息,将视频帧信息存放在A8核分配的共享内存空间,供其他核或其他的link调用,M3 Video ...
- Hibernate一对一双向关联(外键)
网站上各种搜索,都是一些清晰或者不清晰的例子,但是用下来一是确实不给力,二是完全不知道所以然. 后来终于在书中查到了就在这里记一下. 首先要说明,这里只解释双向一对一只有一个表里面有外键的情况. 就以 ...
- 《Linux命令行大全》系列(一、shell是什么)
学习 Linux, 从命令开始 图形界面只是让简单事情,更简单 图形化界面能快速处理简单的事情,如打开/关闭文件 然后,随着事务复杂度的提升,图形化界面的操作也就繁琐起来 例如,word中插入一个图片 ...