请问一个关于混合语言调用与多线程的问题

agua06 2008-02-19 05:44:35
我有个使用了VB作界面,VC编写算法和功能的项目。
其中在vc的dll里面调用的一个接口函数会将结果传给一个使用打印机的函数进行调用,于是我想使用多线程。
类似的代码如下:

extern "C" __declspec (dllexport) int OnDll2(char m_strFileName)
{
......
AfxBeginThread(PrintThreadProc, &m_PrintThreadInfo); //启动线程
WaitForSingleObject(m_hEventInfoCopyDone, INFINITE); //等待线程结束
}

打印函数为
UINT PrintThreadProc(LPVOID pParam)
{
....
::PostMessage(thInfo.hMainWnd, WM_THREAD_END, 0, 0); //返回线程结束消息

return 0; // thread completed successfully
}

不知道以上的操作是否可行?且用Vb进行调用的时候,会不会阻塞住VB的调用?

因为第一次编写多线程dll,所以请各位大侠指导,说说自己的经验,先谢谢了。
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jameshooo 2008-02-20
  • 打赏
  • 举报
回复
extern "C" __declspec (dllexport) int OnDll2(WCHAR* m_strFileName)
VB全部使用UNICODE字符串,所以传递字符串时应该使用WCHAR类型
agua06 2008-02-20
  • 打赏
  • 举报
回复
感谢各位指点,谢谢
僵哥 2008-02-19
  • 打赏
  • 举报
回复
OnDll2最好能返回线程的句柄,然后在VB当中调WaitForSingleObject,这样子VB当中可以使用超时,调DoEvents处理消息.
chNeed1 2008-02-19
  • 打赏
  • 举报
回复
首先要清楚你创建的句柄是全局的,或是说系统级的还是进程级的。。

如果是同一进程,是可以进行阻塞的,无论你是VB调用VC还是相反,所以肯定是没问题的。

cnzdgs 2008-02-19
  • 打赏
  • 举报
回复
AfxBeginThread没用过,我都是直接用CreateThread创建线程。
用WaitForSingleObject等待线程结束时,第1参数给线程句柄即可,线程中不必使用事件或者消息通知父线程。
如果使用WaitForSingleObject,并且用INFINITE参数,就会阻塞当前线程。如果不想阻塞可以用查询方式或者线程结束时SendMessage给主窗口。注意PostMessage是向当前线程发消息。
  • 打赏
  • 举报
回复
会阻塞调用的,因为线程结束后OnDll2 才会返回.
所以得用其他方式通知
ouyh12345 2008-02-19
  • 打赏
  • 举报
回复
多语言混用,最好使用com

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧