javascript - Opret en node.js native extension på Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at få adgang til et bestemt indbygget Windows API-opkald fra en node.js-applikation. Jeg tror, ​​at den bedste måde at gøre dette på er at oprette en indbygget udvidelse/addon til node, som jeg kan kræve i min node.js-applikation og ring fra JavaScript.


Hvor kan jeg finde ressourcer på, hvordan man faktisk kompilerer denne type eksekverbar? Jeg kan finde instruktioner om, hvordan man skriver det, men alle bygningsinstruktionerne synes at være til Linux. Jeg har det fint med at kompilere gennem g ++ på mingw, jeg behøver ikke bruge Visual Studio. Også, hvor finder jeg de headerfiler, jeg har brug for for at kompilere udvidelsen?

Bedste reference


Jeg tror, ​​at node-ffi vil hjælpe dig. Det er enkelt og det er værker. [4]


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
);

Andre referencer 1


Dette er nu forældet. Brug i dag nan og node-gyp til at skrive og bygge indbyggede moduler, der fungerer på tværs af platforme. [5] [6]





Jeg har gennemgået denne smerte selv. Her er en vejledning, der hjalp mig med at få det til at fungere. (PDF) Husk at siden Node nu officielt understøttes på Windows, er Visual Studio det anbefalede byggeværktøj til Node på Windows. [7]


I bund og grund:



  • [8] Download og bygg node kildekoden. (Se PDF)

  • Opret en ny VC ++ Win32-løsning i VS, vælg DLL som applikationstype i guiden, der følger. Sørg for at ATL/MFC er afkrydset.

  • Skriv dit tillæg. Som et eksempel, [9] her er en jeg skrev, der får Windows 'nuværende DNS-indstillinger. Specielt vil [10] projektets indstillingsfil (vcxproj) være interessant, da en af ​​de hårdeste dele får alle biblioteksreferencer/inklusiv stier oprettet. Du vil måske låne min config og erstatte D: ode med placeringen af ​​din Node repo.