我把自己寫的一些函數做成了支持多線程的DLL?,F在有一個需求:調用 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 關注
- 1786 瀏覽
添加回答
舉報
0/150
提交
取消