我把自己写的一些函数做成了支持多线程的DLL。现在有一个需求:调用 DLL 的 A 函数时,需要在 A 中创建一个工作者线程。线程创建函数 thread_create(thread_t *th,void *(*start)(void*),void *arg) 调用_beginthreadex 创建线程。不知能否这样做???现在的情况是,当其他应用程序调用这个 DLL时,就说:无法解析的外部符号 _thread_create,该符号在函数 A 中被引用(IDE:VS2005)谢谢,忘了说了,我的是 C 的程序,发到C#这儿了,不好意思。我没有在 DLLMain 中创建线程,而是其他导出函数。在帮我分析下?呵呵A 函数的实现没有写到C文件中。thread_create 是DLL 的内部函数,不是导出函数,不需要导出吧。
4 回答
慕容森
TA贡献1853条经验 获得超18个赞
C#本身就能支持线程,为什么还要多此一举的去调用DLL创建线程了.
印象中微软说过不要再DllMain中创建线程,否则会死的很惨.可以查阅MSDN.
不过导出函数中应该是可以创建线程的...应该是你的代码写滴不对,不过没必要舍近求远吧
蛊毒传说
TA贡献1895条经验 获得超3个赞
应该是你的A函数的实现写在头文件里了。A里面调用了thread_create,但是thread_create的实现没有从dll里export出来,所以就出这个错。
解决办法:把A函数的实现写到C文件里,头文件里只包含一个声明就够了。 记得导出A函数。。。
thread_create不需要导出。一个原则:只要你的客户端(就是调用DLL的程序)代码能看见thread_create,肯定就会有问题。你只要把A函数放到dll代码的C文件里,头文件里只留个声明,这样客户端就看不到thread_create,也就不会出现刚才那个错误。
- 4 回答
- 0 关注
- 1729 浏览
添加回答
举报
0/150
提交
取消