2012-03-08 10 views
20

Próbuję uzyskać dostęp do określonego natywnego wywołania interfejsu API systemu Windows z poziomu aplikacji node.js. Uważam, że najlepszym sposobem na to jest utworzenie natywnego rozszerzenia/dodatku do węzła, którego mogę wymagać w aplikacji node.js i wywołać ją z JavaScript.Tworzenie macierzystego rozszerzenia node.js w systemie Windows

Gdzie mogę znaleźć zasoby dotyczące tego, jak właściwie skompilować ten rodzaj pliku wykonywalnego? Mogę znaleźć instrukcje, jak to napisać, ale wszystkie instrukcje kompilacji wydają się być dla Linuksa. Nic mi nie jest z kompilacją przez g ++ na mingw, nie potrzebuję używać Visual Studio. Gdzie znajdę pliki nagłówkowe, których potrzebuję, aby skompilować rozszerzenie?

Odpowiedz

26

Myślę, że node-ffi pomoże. To proste i działa.

npm install ffi 
var FFI = require('ffi'); 

function TEXT(text){ 
    return new Buffer(text, 'ucs2').toString('binary'); 
} 

var user32 = new FFI.Library('user32', { 
    'MessageBoxW': [ 
     'int32', [ 'int32', 'string', 'string', 'int32' ] 
    ] 
}); 

var OK_or_Cancel = user32.MessageBoxW(
    0, TEXT('I am Node.JS!'), TEXT('Hello, World!'), 1 
); 
+0

Cool, Nigdy wcześniej nie widziałem tego projektu. –

+5

Ważne informacje: * Nie ma trywialnego narzutu związanego z połączeniami FFI. Porównanie zakodowanej wersji 'strtoul()' z wersją FFI 'strtoul()' pokazuje, że natywne kodowane powiązanie jest ** 5x ** szybsze. Więc nie używaj wersji C funkcji tylko dlatego, że jest szybsza. Koszt połączeń FFI jest znaczny, więc warto je wykorzystać. * Innymi słowy, jest to dobre dla sporadycznych połączeń z natywnym API, ale jeśli zamierzasz wykonywać wiele połączeń natywnych, trzeba napisać własny dodatek, aby uniknąć znacznego obciążenia węzła-ffi. – josh3736

+0

Dlaczego widzę chińskie znaki jako wynik? –

14

To jest teraz nieaktualne. Dziś należy używać nan i node-gyp do pisania i budowania rodzimych modułów działających na różnych platformach.


Sam przeszedłem ten ból. Here's a guide that helped me get it working. (PDF) Należy pamiętać, że ponieważ węzeł jest obecnie oficjalnie obsługiwany w systemie Windows, Visual Studio jest zalecanym narzędziem do budowania węzłów w systemie Windows.

Zasadniczo:

  • Download i zbudować kodu źródłowego węzła. (Zobacz PDF)
  • Utwórz nowe rozwiązanie VC++ Win32 w VS, wybierając DLL jako typ aplikacji w kreatorze, który następuje. Upewnij się, że opcja ATL/MFC nie jest zaznaczona.
  • Napisz swój dodatek. Na przykład: here's one I wrote that gets Windows' current DNS settings. W szczególności interesująca jest project's settings file (vcxproj), ponieważ jedna z najtrudniejszych części pobiera wszystkie odniesienia do bibliotek/dołącza ścieżki. Możesz pożyczyć moją konfigurację i zastąpić D:\node\ lokalizacją repozytorium węzła.
Powiązane problemy