2014-11-20 1 views
1

редакцией, потому что я имел DLL построен неправильно:Использование dll в js-ctypes mozilla add-on sdk - просмотр STDOUT программы?

Я построил DLL, и если я делаю команду dumpbin /exports на DLL я вижу следующее:

Dump of file stun_driver.dll 

File Type: DLL 

    Section contains the following exports for stun_driver.dll 

00000000 characteristics 
546E6C63 time date stamp Thu Nov 20 17:34:11 2014 
    0.00 version 
     1 ordinal base 
     4 number of functions 
     4 number of names 

ordinal hint RVA  name 

     1 0 00001005 OPENSSL_Applink = @ILT+0(_OPENSSL_Applink) 
     2 1 00001320 launch_stun = @ILT+795(_launch_stun) 
     3 2 000011D6 stop_stun = @ILT+465(_stop_stun) 
     4 3 00001078 test_print = @ILT+115(_test_print) 

    Summary 

    1A000 .data 
    2000 .idata 
    46000 .rdata 
    F000 .reloc 
    135000 .text 

Мой код для выполнения «test_print "функции, выглядит следующим образом:

/* import js-ctypes */ 
Cu.import("resource://gre/modules/ctypes.jsm") 
var stun_driver = ctypes.open("C:\\stun_driver.dll"); 

const test_print = stun_driver.declare("test_print", ctypes.default_abi, ctypes.int32_t); 
. 
. 
.//in a button 
test_print(); 

так что мой вопрос, если мой test_print() делает printf("Hello World"), где это текст идти? Кажется, что он не входит в мою консоль браузера или в консоль dos, из которой я запускаю «cfx run».

+1

Хорошая тема на эту тему: https://ask.mozilla.org/question/1086/x11-getting-output-of-nsiprocess/?answer=1116#post-id-1116 – Noitidart

+0

Hrmm. Похоже, что речь идет о запуске команд оболочки из надстройки, а не в методах запуска в общей библиотеке - или я ошибаюсь? – Derek

+0

Вы правы. Чтобы получить выход из dll, вы должны использовать оболочку для ее запуска, а затем получить вывод оболочки. Проверьте subprocess.jsm. – Noitidart

ответ

0

Если вы запустите Firefox из окна терминала, вы получите .

+0

Я могу см. вывод в этом окне терминала из javascript console.log() и т. д., но я, похоже, не вижу никакого вывода из моей программы на языке C – Derek

+0

@Derek. Думаю, вам нужно запустить firefox с помощью командной строки командной строки. : http://stackoverflow.com/a/10793558/1828637 (я думаю, что это только окна) – Noitidart

+2

Интересно, если я использую https://github.com/matthewkastor/Redirector/archive/master.zip и запускаю firefox, используя что я могу получить консольный вывод. Я только что обнаружил, что 'cfx' имеет параметр' --binary-args', который я могу использовать для передачи '-console' в firefox. Это делает терминал придумал firefox, но не получает выход. Однако, если я закрываю этот пустой терминал (который отключает firefox), я вижу, что вывод отображается в исходном терминале с моим 'cfx run' в нем – Derek