可以在多线程 DLL 的接口函数中创建线程吗?

我把自己写的一些函数做成了支持多线程的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 的内部函数,不是导出函数,不需要导出吧。

守候你守候我
浏览 1730回答 4
4回答

翻翻过去那场雪

共享一份DLL-------------原因涉及DLL加载和运行机制,主要有两点:1)DLL动态链接库无法独立运行,必须由一个应用程序进程加载到进程空间后才能使用。加载DLL的进程称为宿主进程。被加载的DLL属于宿主进程,不属于宿主进程内某个线程。2)宿主进程可以重复调用,甚至重复加载DLL。第1次调用DLL或第1次加载DLL时,宿主进程将DLL引入进程空间。一旦宿主进程成功加载DLL,随后的重复调用或重复加载只会增加“引用计数”,而不会加载多份DLL,所以进程中只有一份DLL。

慕容森

C#本身就能支持线程,为什么还要多此一举的去调用DLL创建线程了.印象中微软说过不要再DllMain中创建线程,否则会死的很惨.可以查阅MSDN.不过导出函数中应该是可以创建线程的...应该是你的代码写滴不对,不过没必要舍近求远吧

蛊毒传说

应该是你的A函数的实现写在头文件里了。A里面调用了thread_create,但是thread_create的实现没有从dll里export出来,所以就出这个错。解决办法:把A函数的实现写到C文件里,头文件里只包含一个声明就够了。 记得导出A函数。。。thread_create不需要导出。一个原则:只要你的客户端(就是调用DLL的程序)代码能看见thread_create,肯定就会有问题。你只要把A函数放到dll代码的C文件里,头文件里只留个声明,这样客户端就看不到thread_create,也就不会出现刚才那个错误。
打开App,查看更多内容
随时随地看视频慕课网APP