2012-03-08 38 views
20

Tôi đang cố gắng truy cập một cuộc gọi API Windows riêng biệt từ bên trong ứng dụng node.js. Tôi tin rằng cách tốt nhất để làm điều này là tạo một phần mở rộng/addon gốc cho nút mà tôi có thể yêu cầu trong ứng dụng node.js của tôi và gọi từ JavaScript.Tạo tiện ích mở rộng gốc node.js trên Windows

Tôi có thể tìm tài nguyên về cách thực sự biên dịch loại tệp thi hành này ở đâu? Tôi có thể tìm thấy hướng dẫn về cách viết nó, nhưng tất cả các hướng dẫn xây dựng dường như dành cho Linux. Tôi tốt với biên dịch thông qua g + + trên mingw, tôi không cần phải sử dụng Visual Studio. Ngoài ra, nơi nào tôi tìm thấy các tập tin tiêu đề mà tôi cần để biên dịch phần mở rộng?

Trả lời

26

Tôi nghĩ node-ffi sẽ giúp bạn. Nó đơn giản và nó hoạt động.

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

mát, tôi chưa bao giờ thấy dự án này trước đây. –

+5

Quan trọng cần lưu ý: * Có chi phí không quan trọng liên quan đến các cuộc gọi FFI. So sánh một phiên bản ràng buộc mã hóa cứng của 'strtoul()' với một phiên bản FFI của 'strtoul()' cho thấy rằng ràng buộc mã hoá cứng bản địa là ** 5x ** nhanh hơn. Vì vậy, không chỉ sử dụng phiên bản C của một hàm chỉ vì nó nhanh hơn. Có một chi phí đáng kể trong các cuộc gọi FFI, vì vậy làm cho chúng đáng giá. * Nói cách khác, điều này là tốt cho các cuộc gọi không thường xuyên đến một API gốc, nhưng nếu bạn định thực hiện nhiều cuộc gọi tự nhiên, bạn sẽ phải viết addon của riêng bạn để tránh chi phí quan trọng của node-ffi. – josh3736

+0

Tại sao tôi thấy các ký tự Trung Quốc là đầu ra? –

14

Điều này hiện đã lỗi thời. Hôm nay, sử dụng nannode-gyp để viết và tạo mô-đun gốc hoạt động trên các nền tảng.


Tôi đã tự mình trải qua cơn đau này. Here's a guide that helped me get it working. (PDF) Hãy nhớ rằng kể từ khi Node bây giờ chính thức được hỗ trợ trên Windows, Visual Studio là công cụ xây dựng được đề xuất cho Nút trên Windows.

Về cơ bản:

  • Download và xây dựng mã nguồn Node. (Xem PDF)
  • Tạo giải pháp VC++ Win32 mới trong VS, chọn DLL làm loại ứng dụng trong trình hướng dẫn sau. Đảm bảo rằng ATL/MFC không được chọn.
  • Viết addon của bạn. Ví dụ: here's one I wrote that gets Windows' current DNS settings. Cụ thể, các project's settings file (vcxproj) sẽ được quan tâm vì một trong những phần khó khăn nhất là nhận được tất cả các tài liệu tham khảo thư viện/bao gồm các đường dẫn được thiết lập. Bạn có thể muốn mượn cấu hình của tôi và thay thế D:\node\ bằng vị trí của repo Nút của bạn.
Các vấn đề liên quan