CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

能否在VC的DLL中实现多线程,在Delphi中使用?

楼主ychyzr(网游)2003-12-02 08:53:59 在 VC/MFC / 进程/线程/DLL 提问

能否在VC的DLL中实现多线程,在Delphi中使用?  
  比如:   在VC的DLL中开两个线程,一个负责接受数据,另一个负责处理这些数据。将处理的结果返回到Delphi中使用。 问题点数:100、回复次数:8Top

1 楼flyelf(空谷清音)回复于 2003-12-02 09:05:18 得分 20

应该可以吧,上层应用只关心接口,不需要知道内部是如何实现的Top

2 楼vcforever(累)回复于 2003-12-02 09:49:54 得分 30

在VC的DLL中是可以使用多线程的,不过最好不要在DllMain中启动线程,因为这个时候有可能DLL本身的初始化工作还没有完成,而启动线程又要用到其他的DLL,并对其进行初始化,这样就有可能造成启动线程失败,所以最好在DLL本身的初始化结束后在启动线程,这样会比较安全。  
   
  下面是两种导出DLL中的函数的方法,这两种方法导出的函数都可以供Delphi开发的程序调用  
  第一种方法是为编程项目建立一个.def文件并在该.def文件中加上类似下面的EXPORTS节:  
  EXPORTS  
        MyFunc  
  当Microsoft的链接程序分析这个.def文件时,它发现_MyFunc@8和MyFunc均被输出由于这两个函数名是互相匹配的(除了截断的尾部外),因此链接程序使用MyFunc的.def文件名  
  来输出该函数,而根本不使用_MyFunc@8的名字来输出函数。  
  现在你可能认为,如果使用Microsoft的工具创建一个可执行模块,并且设法将它链接到包  
  含未截断名字的DLL,那么链接程序的运行将会失败,因为它将试图链接到称为_MyFunc@8  
  的函数。当然,链接程序进行了正确的操作,将可执行模块链接到名字为MyFunc的函数。如果想避免使用.def文件,可以使用第二种方法输出未截断的函数版本。在DLL的源代码模块中,可以添加下面这行代码:  
  #pragma   comment(linker,"/export:MyFunc=_MyFunc@8")  
  这行代码使得编译器发出一个链接程序指令,告诉链接程序,一个名叫MyFunc的函数将  
  被输出,其进入点与称为_MyFunc@8的函数的进入点相同。第二种方法没有第一种方法容易,  
  因为你必须自己截断函数名,以便创建该代码行。另外,当使用第二种方法时,   D   L   L实际上  
  输出用于标识单个函数的两个符号,即MyFunc和_MyFunc@8,而第一种方法只输出符号  
  MyFunc。第二种方法并没有给你带来更多的好处,它只是使你可以避免使用.def的文件而  
  已。  
  Top

3 楼Semigod()回复于 2003-12-02 10:42:48 得分 10

肯定是可以的啦,实再闲麻烦就用汇编写VC要写的代码Top

4 楼ychyzr(网游)回复于 2003-12-02 11:00:51 得分 0

谢谢大家!  
  是在Delphi调用DLL中函数时开启线程还是在DLL装入时开启呢?Top

5 楼ISunwu(刀口蒙特)回复于 2003-12-02 11:03:29 得分 10

当然是应该在调用DLL中函数时开启线程。Top

6 楼ISunwu(刀口蒙特)回复于 2003-12-02 11:04:17 得分 10

还有,一定要注意:在释放Dll前一定要确保该线程已经停止,否则会出异常。Top

7 楼u2m(醉到天亮说晚安(poople.blogcn.com) )回复于 2003-12-02 11:18:03 得分 20

肯定可以的啦,我用到很多类似的情况  
  应该是相应的导出函数中开启线程,然后再另一个函数中关闭此线程。你作上层接口应用  
  没必要考虑那么多,那是VC函数内部考虑的东西Top

8 楼ljzcom()回复于 2003-12-02 15:05:45 得分 0

vcforever(霓裳羽衣)真是厉害,学习中。。。Top

相关问题

  • 多线程和DLL
  • VC多线程DLL中回调VB函数的问题!! 急!!
  • 一只菜鸟学vc多线程!
  • 请脚vc的多线程问题
  • 请您解答:delphi多线程例程
  • Dll、多线程、事件传递
  • 怎么在DLL中使用多线程?
  • dll中多线程的问题?
  • 讨论:dll和多线程问题!!!
  • 多线程中调用dll的问题。

关键词

  • 函数
  • dll
  • 线程
  • 多线程
  • 代码
  • 文件
  • 模块
  • vc
  • delphi
  • myfunc

得分解答快速导航

  • 帖主:ychyzr
  • flyelf
  • vcforever
  • Semigod
  • ISunwu
  • ISunwu
  • u2m

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo