【C# C++】C#中调用msvcr100.dll中的_beginthreadex函数
msvcr100.dll是VS2010的C运行时库DLL, _beginthreadex开启子线程的函数就在这个DLL里面实现
unsigned long _beginthreadex(
void *security, //安全属性
unsigned stack_size, //线程栈大小
unsigned ( __stdcall *start_address )( void * ), //线程函数
void *arglist, //线程函数的参数 */
unsigned ini tflag, //标志:0或CREATE_SUSPEND
unsigned *thrdaddr ); //线程ID
要想在C#中使用这个函数,必须:引入他所在的C运行时库DLL, 即msvcrXX.dll, XX代表版本,VS1020为100,
还要知道C++中的数据类型和C#中数据类型的对照,可以百度:C# C++数据类型对照表 void* == IntPtr
unsigned == uint
unsigned * == ref uint
函数指针 == 委托
所以, 如下:
private delegate uint StartAddress(IntPtr param);
[DllImport("msvcr100.dll")] //vs2010的版本
static extern uint _beginthreadex(
IntPtr psa, //安全属性
uint stacksize, //栈大小
StartAddress start, //线程函数
IntPtr param, //线程函数参数
uint flags, //编辑,0或CREATE_SUSPEND(C++)
ref uint threadID //线程ID
);
private void button_new_thread_Click(object sender, EventArgs e)
{
uint unThreadID = ;
StartAddress start = new StartAddress(show); //委托对象,函数指针
_beginthreadex((IntPtr), , start, (IntPtr), , ref unThreadID);
}
//委托函数
private uint show(IntPtr param)
{
MessageBox.Show("这是子线程");
return ;
}
【C# C++】C#中调用msvcr100.dll中的_beginthreadex函数的更多相关文章
- Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)
文章目录: 1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Ap ...
- C#中调用user32.dll库的keybd_Event函数,操作键盘
keybd_event()的函数原型是: void keybd_event( byte bVk, //虚拟键码 byte bScan, //该键的硬件扫描码 dword ...
- 在.net中调用Delphi dll的Pchar转换
Pchar是非托管代码,要在.net中调用Delphi dll中的功能,请使用MarshalAs属性告知.net调用PInvoke去转换.net中标准的string类型.如果Delphi dll是De ...
- 在SQL Server 2008中调用.net,dll
原文:在SQL Server 2008中调用.net,dll T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可以在SQ ...
- SOE 中调用第三方dll
一.简介 在利用soe实现server的扩展的时候,有些时候,需要调用第三方的dll库.官网中给出了明确的说明,soe中是可以添加第三方的dll文件,但是一直没有测试.按照官方的步骤应该是一个非常的简 ...
- vb6如何调用delphi DLL中的函数并返回字符串?
1,问题描述 最近发现vb6调用delphi DLL中的函数并返回字符串时出现问题,有时正常,有时出现?号,有时干脆导致VB程序退出 -- :: 将金额数字转化为可读的语音文字:1转化为1元 ???? ...
- Oracle数据库中调用Java类开发存储过程、函数的方法
Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日 浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...
- CUDA常见问题之无法在c文件中调用cu文件中定义的函数
当在C源文件中调用cu文件中定义的函数时,会出现undefined reference的问题,而在C++源文件中调用cu文件中定义的函数时则不会出现这个问题. 出现上述问题的原因是,nvcc编译器采用 ...
- VS开发】C中调用C++文件中定义的function函数
[VS开发]C中调用C++文件中定义的function函数 标签(空格分隔): [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 精要一揽 C调用 ...
随机推荐
- js call apply bind简单的理解
相同点:JS中call与apply方法可以改变某个函数执行的上下文环境,也就是可以改变函数内this的指向.区别:call与apply方法的参数中,第一个参数都是指定的上下文环境或者指定的对象,而ca ...
- Project Euler 91:Right triangles with integer coordinates 格点直角三角形
Right triangles with integer coordinates The points P (x1, y1) and Q (x2, y2) are plotted at integer ...
- Android学习及开发随记1:Android Studio安装配置
1.本系列仅为个人使用,概不负责.随着时间推移,部分内容可能因为软件更新而出现不能对应的情况. 本文的配置情况,仅针对Android Studio v1.1.0 windows版本 全新安装. Goo ...
- Ping 命令
Ping”命令是我们在判断网络故障常用的命令 它是用来检查网络是否通畅或者网络连接速度的命令. 它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包, 对方就要 ...
- Objective-c CoreData
#import "AppDelegate.h" #import "Person.h" @implementation AppDelegate @synthesi ...
- gdb 基本命令
backtrace(或bt) 查看各级函数调用及参数 finish 连续运行到当前函数返回为止,然后停下来等待命令 frame(或f) 帧编号 选择栈帧 info(或i) locals 查看当前栈帧局 ...
- opengl 杂记
函数原型: void glClear(GLbitfield mask); 参数说明: GLbitfield:可以使用 | 运算符组合不同的缓冲标志位,表明需要清除的缓冲,例如glClear(GL_CO ...
- Mybatis中配置Mapper的方法
在这篇文章中我主要想讲一下Mybatis配置文件中mappers元素的配置.关于基础部分的内容可以参考http://haohaoxuexi.iteye.com/blog/1333271. 我们知道在M ...
- AutoResetEvent
private static readonly AutoResetEvent autoResetEvent = new AutoResetEvent(false); private static vo ...
- Android布局详解之一:FrameLayout
原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6702273 FrameLayout是最简单的布局了.所有放在布局里的 ...