2013-05-27 1 views
0

У меня есть некоторые проблемы с tcl из исполняемого файла c с использованием интерпретатора python. По какой-то причине он не может загрузить <fullpath>Tix843.dll. Но при запуске кода python непосредственно (из python) это работает. Путь/имя в dll верен ... с зависимым ходоком я вижу только, что Tkinter пытается загрузить dll tix, но не может найти его ...Tcl: как изменить поведение nameofexecutable

После отслеживания всех путей в tcl я могу только обнаружить 1 разницу: nameofexecutable. При запуске непосредственно из python это путь к python.exe, но при запуске его из исполняемого файла c это (очевидно) path/name of the executable.

В tcl/tk я заметил, что nameofexecutable используется для установки множества путей, поэтому я думаю, что это вызывает мою проблему.

То, что я пытался предотвратить эту проблему:

  1. добавить путь к DLL на пути
  2. системы добавьте путь к DLL в $auto_path -> без изменений
  3. не установить argv[0] с-исполняемому перед вызовом PySys_SetArgv -> без изменений

не я делаю что-то глупое или как я могу установить nameofexecutable? Есть ли другой способ исправить эту проблему.

редактировать: снова проверяется с зависимостью ходунки и теперь у меня есть не ретранслировать никакой подсказки, что происходит ... здесь результаты:

00:00:07.800: LoadLibraryExW("C:/Program Files (x86)/Python27/tcl/reg1.2/tclreg12.dll", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) called from "c:\program files (x86)\python27\dlls\TCL85.DLL" at address 0x02468871. 
00:00:07.800: Loaded "c:\program files (x86)\python27\tcl\reg1.2\TCLREG12.DLL" at address 0x00440000. Successfully hooked module. 
00:00:07.816: Unloaded "c:\program files (x86)\python27\tcl\reg1.2\TCLREG12.DLL" at address 0x00440000. 
00:00:07.816: LoadLibraryExW("C:/Program Files (x86)/Python27/tcl/reg1.2/tclreg12.dll", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) returned NULL. Error: The specified module could not be found (126). 
00:00:07.832: LoadLibraryExW("C:/Program Files (x86)/Python27/tcl/reg1.2/tclreg12.dll", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) called from "c:\program files (x86)\python27\dlls\TCL85.DLL" at address 0x0246889C. 
00:00:07.832: Loaded "c:\program files (x86)\python27\tcl\reg1.2\TCLREG12.DLL" at address 0x00440000. Successfully hooked module. 
00:00:07.832: Unloaded "c:\program files (x86)\python27\tcl\reg1.2\TCLREG12.DLL" at address 0x00440000. 
00:00:07.832: LoadLibraryExW("C:/Program Files (x86)/Python27/tcl/reg1.2/tclreg12.dll", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) returned NULL. Error: The specified module could not be found (126). 
00:00:07.925: LoadLibraryExW("C:/Program Files (x86)/Python27/tcl/tix8.4.3/Tix843.dll", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) called from "c:\program files (x86)\python27\dlls\TCL85.DLL" at address 0x02468871. 
00:00:07.925: Loaded "c:\program files (x86)\python27\tcl\tix8.4.3\TIX843.DLL" at address 0x04480000. Successfully hooked module. 
00:00:07.925: Unloaded "c:\program files (x86)\python27\tcl\tix8.4.3\TIX843.DLL" at address 0x04480000. 
00:00:07.925: LoadLibraryExW("C:/Program Files (x86)/Python27/tcl/tix8.4.3/Tix843.dll", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) returned NULL. Error: The specified module could not be found (126). 
00:00:07.941: LoadLibraryExW("C:/Program Files (x86)/Python27/tcl/tix8.4.3/Tix843.dll", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) called from "c:\program files (x86)\python27\dlls\TCL85.DLL" at address 0x0246889C. 
00:00:07.956: Loaded "c:\program files (x86)\python27\tcl\tix8.4.3\TIX843.DLL" at address 0x04480000. Successfully hooked module. 
00:00:07.956: Unloaded "c:\program files (x86)\python27\tcl\tix8.4.3\TIX843.DLL" at address 0x04480000. 
00:00:07.956: LoadLibraryExW("C:/Program Files (x86)/Python27/tcl/tix8.4.3/Tix843.dll", 0x00000000, LOAD_WITH_ALTERED_SEARCH_PATH) returned NULL. Error: The specified module could not be found (126). 
00:00:07.956: LoadLibraryA("shell32") called from "c:\program files (x86)\python27\dlls\TK85.DLL" at address 0x024BBACD. 
00:00:07.956: LoadLibraryA("shell32") returned 0x75480000. 

так он может найти DLLS несколько раз, но не всегда и то сбой

ответ

0

Скорее всего, программа C не может найти Tix.dll, потому что она не находится на вашем пути. Python может найти его, потому что он находится в том же каталоге, что и исполняемый файл python, или в подкаталоге, о котором знает python. Попробуйте добавить путь к dll в переменную среды PATH.

+0

Извините, забыл упомянуть, я пробовал это, но без успеха ... он фактически дает правильный путь к dll и говорит, что он не может загрузить его (или зависимую библиотеку ...), которую я проверил с помощью ходунки зависимостей, но что только говорит, что Tkinter Cant загружает Tix.dll ... так что не знаю, как исправить это – Jen

1

Свойство nameofexecutable установлено во время инициализации библиотеки Tcl (получено из аргумента Tcl_FindExecutable(), который я не знаю, как именно вызывается, но определенно это: он используется для всякого рода вещей). Вы не можете установить его в какой-либо другой точке. Однако Tcl фактически не использует это значение для того, что вы не можете переопределить.

Вместо этого, вы должны смотреть на установку переменной TCLLIBPATH среды в список Tcl каталогов для поиска определений пакетов. Или вы можете добавить директории к глобальной переменной auto_path внутри Tcl (с lappend auto_path), который содержит фактическую список мест для поиска (ну, на самом деле, он выглядит в непосредственных подкаталогах мест, перечисленных в этой переменной). Это нужно сделать, прежде чем пытаться загрузить Tix, конечно.

 Смежные вопросы

  • Нет связанных вопросов^_^