Windows NT6.xでレガシーアプリからマルチスレッドでネイティブ機能を呼び出すと TLS未初期化でクラッシュする
Windows 10で、Windows NT 5.xベースのアプリを開発、内部からマルチスレッドでネイティブ機能を呼び出したところクラッシュしてしまった。
どうやら、TLS領域が初期化されていないらしく、Windows 2000/XPでWindows 7ネイティブアプリを起動したときの様な挙動になってしまっている。
Acess Violation on IHTMLDocument2::write() in a thread
調べたら似たようなコード書いてる人が居た。
でも、IStream は使ってないのだよなぁ‥‥。
猫科研究所 - mainとスレッドの前後処理(3)
Manually create a Thread Local Storage (TLS) Callback
この辺り参考にしてTlsの初期化処理を自前で入れるしかないんだろうか・ω・
#pragma comment(linker, "/INCLUDE:__tls_used") #pragma data_seg(".tls") static void* flpthread_xla =0; static DWORD flpthread_tls_data = 0; static HANDLE flpthread_tls_index = NULL; IMAGE_TLS_DIRECTORY ti= { (DWORD)&flpthread_tls_data, (DWORD)&flpthread_tls_data, (DWORD)&flpthread_tls_index, (DWORD)(&flpthread_xla+1), (DWORD)0, // unused (not supported) (DWORD)0 }; #pragma data_seg() void __stdcall tls_callback( void*, DWORD dwReason, void* ) {
#pragma data_seg(".CRT$XLB") |
コールバック関数は動くけど、初期化が良く分からぬ ・ω・
malloc で自分でメモリ確保するんかな?
Hi look at this code : https://sharetext.me/qjgx4gojh1
Hi look at this code : https://sharetext.me/qjgx4gojh1
>>1
thx i will try it :3
>>1
thx i will try it :3