2016-07-01 10 views
1

Ich möchte eine Funktion aufrufen, die in "C" DLL von node.js Javascript geschrieben wird. Ich benutze "ffi" Modul in node.js und Elektron. Die Funktion, die ich aufrufen möchte, ist "int FDColor_GetSWVersion (char * softwareVersion)". Ich verwende den folgenden Code:Ich möchte eine Funktion aufrufen, die in "C" DLL von node.js Javascript geschrieben wird?

var libm = ffi.Library(__dirname + "\\viewmodels\\FDColor.dll", { 
     'FDColor_GetSWVersion': [ 'int', ['string' ] ] 
    }); 

Aber ich erhalte die Fehlermeldung "Dynamic Linking Fehler: Win32-Fehler 126". Kann mir jemand bitte

+0

Haben Sie versucht http://StackOverflow.com/A/14362289/2703418? – bzeaman

+0

Fehler 126 ist "das angegebene Modul konnte nicht gefunden werden". Sicher, du passierst den richtigen Weg? – immibis

+0

Pfad ist korrekt. Ich denke, das Problem sollte der Parametertyp sein, der die Funktion (char * softwareVersion) übergibt, die nicht mit string kompatibel ist. Ich kenne die Ursache nicht :( –

Antwort

1

helfen Wenn Sie bekommen „das angegebene Modul wurde nicht gefunden werden kann“, bezieht sich dies auf die DLL, die Sie versuchten, zu laden oder eine ihrer Abhängigkeiten.

Sie haben einen vollständigen Pfad zur ffi.Library-Funktion angegeben, aber wenn FDColor.dll seine Abhängigkeiten lädt, wird wahrscheinlich kein Pfad verwendet, wodurch LoadLibrary zuerst im aktuellen Arbeitsverzeichnis des Prozesses und dann in der Verzeichnisse der PATH-Umgebungsvariablen.

So

  1. Verwendung Dependency Walker (http://www.dependencywalker.com/) auf FDColor.dll zu sehen, ob es irgendwelche Abhängigkeiten hat. Der beste Weg, dies zu tun ist, es von der gleichen Stelle aus aufzurufen, an der Sie dieses Skript aufrufen (indem Sie den gleichen Pfad angeben, den Sie an ffi.Library übergeben).

  2. Für jede DLL, die versucht wird zu laden, aber nicht gefunden wird, müssen Sie den Ordner zur PATH-Umgebungsvariablen der Umgebung hinzufügen, die dieses Skript aufruft.

  3. Sie können überprüfen, ob Sie dieses Recht durch Wiederholen von Schritt getan hat 1 nach PATH an der Eingabeaufforderung zu setzen. DependencyWalker wird jetzt zeigen, dass es diese DLLs finden kann.

+0

Es zeigt Fehler „Warnung: mindestens eine Verzögerung Lastabhängigkeits Modul wurde nicht gefunden Warnung: mindestens ein Modul auf Grund eines fehlenden Exportfunktion in einer verzögerungslastabhängige Modul eine nicht aufgelöste Import hat „ –

+0

Großen - bewegen auf 2 :) zu Schritt - es könnte.. Hilfe, um einige Screenshots von dem, was in Ihrer Frage passiert zu zeigen. –

+1

Großartig :) Es funktioniert. Thxs bro :) –