Windows 7 尝试在windows 7上使用tcl线程会导致访问冲突

Windows 7 尝试在windows 7上使用tcl线程会导致访问冲突,windows-7,tcl,access-violation,Windows 7,Tcl,Access Violation,我试图让这个简单的程序在windows上运行,但它崩溃了: unsigned (__stdcall testfoo)(ClientData x) { return 0; } int main() { Tcl_ThreadId testid = 0; Tcl_CreateThread(&testid, testfoo, (ClientData) NULL, TCL_THREAD_STACK_DEFAULT, TCL_THREAD_NOFLAGS); } 未签名(u stdcall

我试图让这个简单的程序在windows上运行,但它崩溃了:

unsigned (__stdcall testfoo)(ClientData x) { return 0; } int main() { Tcl_ThreadId testid = 0; Tcl_CreateThread(&testid, testfoo, (ClientData) NULL, TCL_THREAD_STACK_DEFAULT, TCL_THREAD_NOFLAGS); } 未签名(u stdcall testfoo)(ClientData x) { 返回0; } int main() { Tcl_ThreadId testid=0; Tcl_CreateThread(&testid,testfoo,(ClientData)NULL,Tcl_THREAD_STACK_DEFAULT,Tcl_THREAD_NOFLAGS); } 我使用的是Cug生成的Maxy文件,链接到TCL的5.5.7版本,我使用Visual C++ 2008 Express编译了自己。它是使用msvcrt、static和threads编译的,结果库的名称是tcl85tsx.lib。错误是:

Unhandled exception at 0x77448c39 in main.exe: 0xC0000005: Access violation writing location 0x00000014. main.exe中0x77448c39处的未处理异常:0xC0000005:访问冲突写入位置0x00000014。
Tcl库工作得很好,我甚至可以通过将线程扩展加载到它来运行线程脚本示例。我的假设是,内存冲突有一些可怕的错误,但我不知道是什么。感谢您的帮助。

我最终编译了一个可调试的Tcl版本。问题是您需要调用tclinitsubsystem来初始化创建线程所需的所有锁。不幸的是,这不能公开访问,需要使用Tcl_CreateInterp创建intepreter。这是我正在开发的一个应用程序的测试程序,它有一个Tcl解释器,所以在生产中不会出现问题。我只需要为这个简单的测试程序创建一个解释器。

tclinitsubsystem
在调用公共的
Tcl\u FindExecutable()
时被调用。如果您手头没有可执行文件名,只需在那里传递NULL即可。

我建议:尝试从Windbg启动应用程序并查看stacktrace;您是否在其他平台(甚至在不同版本的Windows上)测试过相同的代码?