Verwenden Sie C/C, um Node.js-Module (2)_node.js zu implementieren
Das Vergangene Revue passieren zu lassen und Neues zu lernen, kann glücklich machen
Bitte denken Sie zunächst an dieses V8-Online-Handbuch – http://izs.me/v8-docs/main.html.
Erinnern Sie sich noch an die Datei „building.gyp“ vom letzten Mal?
{
„Ziele“: [
{
„target_name“: „addon“,
„Quellen“: [ „addon.cc“ ]
}
]
}
Einfach so, wenn Sie noch ein paar *.cc-Dateien haben, sieht es so aus:
„sources“: [ „addon.cc“, „myexample.cc“ ]
Beim letzten Mal haben wir die beiden Schritte getrennt. Tatsächlich können Konfiguration und Kompilierung zusammengefügt werden:
$ node-gyp configure build
Haben Sie die Bewertung abgeschlossen? ohne? !
Okay, lass uns weitermachen.
Inhaltsverzeichnis
Funktionsparameter
Jetzt müssen wir endlich über Parameter reden.
Stellen wir uns vor, dass es eine solche Funktion add(a, b) gibt, die das Addieren von a und b und die Rückgabe des Ergebnisses darstellt. Schreiben Sie also zunächst die Funktionsübersicht:
#include
unter Verwendung des Namespace v8;
Handle
{
HandleScope-Bereich;
//... Es geht wieder los!
}
Argumente
Dies ist der Parameter der Funktion. Werfen wir zunächst einen Blick auf die offizielle Handbuchreferenz von v8.
•int Länge() const
•Lokaler
Der Rest ist uns egal, diese beiden sind wichtig! Eine stellt die Anzahl der an die Funktion übergebenen Parameter dar, und die andere Klammer wird verwendet, um über den Indexindex auf den n-ten Parameter zuzugreifen.
Daher können wir die oben genannten Anforderungen grob verstehen, da args.Length() 2 ist, args[0] a darstellt und args[1] b darstellt. Und wir müssen feststellen, dass der Typ dieser beiden Zahlen Zahl sein muss.
Beachten Sie, dass der Indexoperator in eckigen Klammern einen Local
•IsArray()
•IsBoolean()
•IsDate()
•IsFunction()
•IsInt32()
•IsNativeError()
•IsNull()
•IsNumber()
•IsRegExp()
•IsString()
•...
Ich werde sie nicht einzeln auflisten, den Rest können Sie in der Dokumentation lesen. 。:.゚ヽ(*´∀`)ノ゚.:。
ThrowException
Dies ist eine Funktion, die wir später verwenden werden. Details finden Sie in der v8-Dokumentation.
Wie der Name schon sagt, wird ein Fehler ausgegeben. Nach der Ausführung dieser Anweisung entspricht dies der Ausführung einer throw()-Anweisung in der lokalen Datei Node.js. Zum Beispiel:
ThrowException(Exception::TypeError(String::New("Falsche Anzahl von Argumenten")));
Es entspricht der Ausführung eines Node.js:
throw new TypeError("Falsche Anzahl von Argumenten");
Undefiniert()
Diese Funktion ist auch in der Dokumentation enthalten.
Konkret handelt es sich um einen Nullwert, da einige Funktionen keinen bestimmten Wert zurückgeben müssen oder es keinen Rückgabewert gibt. Stattdessen muss Undefiniert () verwendet werden.
Lass es uns tun, Saonian!
Nachdem Sie die oben genannten Punkte verstanden haben, glaube ich, dass Sie bald in der Lage sein werden, die Logik von a b zu schreiben. Ich werde den Code aus dem offiziellen Handbuch von Node.js kopieren und Ihnen zum Durchgehen geben:
#include
unter Verwendung des Namespace v8;
Handle
{
HandleScope-Bereich;
// bedeutet, dass mehr als 2 Parameter übergeben werden können, aber tatsächlich verwenden wir nur die ersten beiden
If(args.Length() < 2)
{
// Fehler auslösen
ThrowException(Exception::TypeError(String::New("Falsche Anzahl von Argumenten")));
// Nullwert zurückgeben
returnscope.Close(Undefiniert());
}
// Wenn einer der ersten beiden Parameter keine Zahl ist
If(!args[0]->IsNumber() || !args[1]->IsNumber())
{
// Einen Fehler auslösen und einen Nullwert zurückgeben
ThrowException(Exception::TypeError(String::New("Wrong arguments")));
returnscope.Close(Undefiniert());
}
// Weitere Informationen finden Sie in der Dokumentation zu Version 8
// http://izs.me/v8-docs/classv8_1_1Value.html#a6eac2b07dced58f1761bbfd53bf0e366)
// `NumberValue`-Funktion
Local
returnscope.Close(num);
}
Die Funktion ist erledigt!
Schreiben Sie abschließend die Exportfunktion am Ende und es ist in Ordnung.
void Init(Handle
Nachdem Sie es kompiliert haben, können wir es wie folgt verwenden:
console.log(addon.add(1, 1) "b");
Sie werden eine 2b sehen! ✧。٩(ˊᗜˋ)و✧*。
Rückruffunktion
Im letzten Kapitel haben wir nur über „Hallo Welt“ gesprochen. In diesem Kapitel hat Oma eine bewusste Entdeckung gemacht und eine weitere Rückruffunktion geschrieben.
Wie üblich schreiben wir zuerst das Framework:
#include
unter Verwendung des Namespace v8;
Handle
{
HandleScope-Bereich;
// ... knisternd knisternd
returnscope.Close(Undefiniert());
}
Dann haben wir beschlossen, es so zu verwenden:
func(function(msg) {
console.log(msg);
});
Das heißt, es wird ein Parameter an die Rückruffunktion übergeben. Wir stellen uns vor, dass es sich um einen String handelt, und können ihn dann mithilfe von console.log() ausgeben.
Zuerst benötigen Sie eine String-Serie
Lassen Sie uns ohne weitere Umschweife zuerst einen Faden ziehen und dann darüber reden. (√ ζ ε:)
Wir müssen diese Zeichenfolge jedoch zu einem universellen Typ machen, da der Node.js-Code schwach typisiert ist.
Local
Was? Sie fragen mich, was Local
Dann lassen Sie mich ein wenig darüber sprechen, beziehen Sie sich hier darauf und auf das V8-Referenzdokument.
Wie in der Dokumentation gezeigt, erbt Local
Dann lass uns über Lokal sprechen.
Es gibt zwei Arten von Handle: Local
Dann benötigen Sie eine Parametertabellenreihe
Wie erhalte ich die Befehlszeilenparameter, nachdem ich C/C über die Terminal-Befehlszeile aufgerufen habe?
#include
void main(int argc, char* argv[])
{
// ...
}
argc ist hier übrigens die Anzahl der Befehlszeilenparameter und argv[] ist jeder Parameter. Wenn Sie dann die Rückruffunktion von Node.js aufrufen, verwendet v8 ebenfalls eine ähnliche Methode:
int argc,
Handle
);
~~QAQ steckt in Handle
Nachdem ich es in vielen Aspekten überprüft habe (SegmentFault, StackOverflow und eine KouKou-Gruppe), habe ich endlich die Bedeutung der drei Parameter der obigen Funktion gelöst.
Zu den nächsten beiden Parametern werde ich nicht viel sagen. Einer ist die Anzahl der Parameter und der andere ist ein Array von Parametern. Für den ersten Parameter Handle
Es ist dasselbe wie in JS anwenden. In JS tun Sie es
var context = ...;
cb.apply(context, [ ...args...]);
Das als erstes Argument übergebene Objekt wird innerhalb des Funktionsumfangs zu diesem Objekt. Wenn Sie sich mit JS nicht gut auskennen, können Sie hier mehr über JS lesen: http://unschooled.org /2012/03/understanding-javascript-this/
——Auszug aus StackOverflow
Kurz gesagt besteht seine Funktion darin, den this-Zeiger der aufgerufenen Funktion anzugeben. Die Verwendung dieses Aufrufs ähnelt bind(), call() und apply() in JavaScript.
Was wir also tun müssen, ist, zuerst die Parametertabelle zu erstellen und dann die Call-Funktion zur Ausführung zu übergeben.
Der erste Schritt besteht darin, die Konvertierungsfunktion anzuzeigen, da es sich ursprünglich um einen Objekttyp handelt:
Local
Der zweite Schritt besteht darin, eine Parametertabelle (Array) zu erstellen:
Local
Letzte Aufruffunktionsreihe
Rufen Sie cb auf und übergeben Sie die Parameter:
cb->Call(Context::GetCurrent()->Global(), 1, argv);
Der erste Parameter hier, Context::GetCurrent()->Global(), bedeutet, dass der globale Kontext der Funktion abgerufen wird. Der zweite Parameter ist die Nummer in der Parametertabelle (schließlich ist Node.js Das Array hat ein Längenattribut, aber das System kennt die Länge des Arrays in C eigentlich nicht, und Sie müssen selbst eine Zahl übergeben, um die Länge des Arrays anzugeben. Der letzte Parameter ist die Parametertabelle, die wir gerade erstellt haben .
Abschlusskapitel, Abschlussdokumentenreihe
Ich glaube, jeder kennt diesen Schritt, der darin besteht, die Funktion zu schreiben, sie dann in die exportierte Funktion einzufügen und sie schließlich zu deklarieren.
Ich werde den Code einfach direkt veröffentlichen, oder Sie können direkt zur Node.js-Dokumentation gehen.
#include
unter Verwendung des Namespace v8;
Handle
{
HandleScope-Bereich;
Local
const unsigned argc = 1;
Local
cb->Call(Context::GetCurrent()->Global(), argc, argv);
returnscope.Close(Undefiniert());
}
void Init(Handle
NODE_MODULE(addon, Init)
Gut gemacht! Machen Sie die letzten verbleibenden Schritte einfach selbst. Den Aufruf dieser Funktion in JS habe ich bereits erwähnt.
Extra
Nun, ich habe das Gefühl, dass meine Lernnotizen immer hemmungsloser werden. Bitte teilen Sie es auf ~
Lassen Sie uns heute hier aufhören. Beim Schreiben von Studiennotizen bin ich erneut auf Probleme gestoßen, beispielsweise auf die Bedeutung der Parameter der Call-Funktion.
Wenn Sie der Meinung sind, dass diese Reihe von Studiennotizen immer noch hilfreich für Sie ist, kommen Sie und machen Sie mit bei dem Spaß~Σ>―(〃°ω°〃)♡→

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen


![WLAN-Erweiterungsmodul ist gestoppt [Fix]](https://img.php.cn/upload/article/000/465/014/170832352052603.gif?x-oss-process=image/resize,m_fill,h_207,w_330)
Wenn es ein Problem mit dem WLAN-Erweiterungsmodul Ihres Windows-Computers gibt, kann dies dazu führen, dass Sie nicht mehr mit dem Internet verbunden sind. Diese Situation ist oft frustrierend, aber glücklicherweise enthält dieser Artikel einige einfache Vorschläge, die Ihnen helfen können, dieses Problem zu lösen und Ihre drahtlose Verbindung wieder ordnungsgemäß funktionieren zu lassen. Behebung, dass das WLAN-Erweiterbarkeitsmodul nicht mehr funktioniert Wenn das WLAN-Erweiterbarkeitsmodul auf Ihrem Windows-Computer nicht mehr funktioniert, befolgen Sie diese Vorschläge, um das Problem zu beheben: Führen Sie die Netzwerk- und Internet-Fehlerbehebung aus, um drahtlose Netzwerkverbindungen zu deaktivieren und wieder zu aktivieren. Starten Sie den WLAN-Autokonfigurationsdienst neu. Ändern Sie die Energieoptionen. Ändern Erweiterte Energieeinstellungen Netzwerkadaptertreiber neu installieren Einige Netzwerkbefehle ausführen Schauen wir uns das nun im Detail an

In diesem Artikel werden Methoden zur Behebung des Ereignisses ID10000 beschrieben, das darauf hinweist, dass das WLAN-Erweiterungsmodul nicht gestartet werden kann. Dieser Fehler kann im Ereignisprotokoll des Windows 11/10-PCs erscheinen. Das WLAN-Erweiterbarkeitsmodul ist eine Komponente von Windows, die es unabhängigen Hardwareanbietern (IHVs) und unabhängigen Softwareanbietern (ISVs) ermöglicht, Benutzern angepasste Features und Funktionen für drahtlose Netzwerke bereitzustellen. Es erweitert die Funktionalität nativer Windows-Netzwerkkomponenten durch Hinzufügen von Windows-Standardfunktionen. Das WLAN-Erweiterungsmodul wird im Rahmen der Initialisierung gestartet, wenn das Betriebssystem Netzwerkkomponenten lädt. Wenn beim WLAN-Erweiterungsmodul ein Problem auftritt und es nicht gestartet werden kann, wird möglicherweise eine Fehlermeldung im Protokoll der Ereignisanzeige angezeigt.

Eine Konstante wird auch als Variable bezeichnet. Sobald sie definiert ist, ändert sich ihr Wert während der Ausführung des Programms nicht. Daher können wir eine Variable als Konstante deklarieren, die auf einen festen Wert verweist. Es wird auch Text genannt. Konstanten müssen mit dem Schlüsselwort Const definiert werden. Syntax Die Syntax der in der Programmiersprache C verwendeten Konstanten ist wie folgt: consttypeVariableName; (oder) Verschiedene Arten von Konstanten Die verschiedenen Arten von Konstanten, die in der Programmiersprache C verwendet werden, sind wie folgt: Ganzzahlige Konstanten – Beispiel: 1,0 ,34, 4567 Gleitkommakonstanten – Beispiel: 0,0, 156,89, 23,456 Oktal- und Hexadezimalkonstanten – Beispiel: Hex: 0x2a, 0xaa.. Oktal

VS Code und Visual Studio C++ IntelliSense können Bibliotheken möglicherweise nicht abrufen, insbesondere bei der Arbeit an großen Projekten. Wenn wir mit der Maus über #Include<wx/wx.h> fahren, wird die Fehlermeldung „Quelldatei 'string.h' kann nicht geöffnet werden“ angezeigt (abhängig von „wx/wx.h“) und manchmal reagiert die Funktion zur automatischen Vervollständigung nicht. In diesem Artikel erfahren Sie, was Sie tun können, wenn VSCode und VSC++ IntelliSense nicht funktionieren oder Bibliotheken nicht extrahieren. Warum funktioniert mein Intellisense nicht in C++? Bei der Arbeit mit großen Dateien kommt es manchmal zu IntelliSense

Können Sie aufgrund des Fehlercodes 8C230002 keine Inhalte auf Ihrer Xbox kaufen oder ansehen? Einige Benutzer erhalten diese Fehlermeldung immer wieder, wenn sie versuchen, Inhalte auf ihrer Konsole zu kaufen oder anzusehen. Leider liegt ein Problem mit dem Xbox-Dienst vor. Versuchen Sie es später erneut. Wenn Sie Hilfe zu diesem Problem benötigen, besuchen Sie www.xbox.com/errorhelp. Statuscode: 8C230002 Dieser Fehlercode wird normalerweise durch vorübergehende Server- oder Netzwerkprobleme verursacht. Es kann jedoch auch andere Gründe geben, beispielsweise die Datenschutzeinstellungen oder die Kindersicherung Ihres Kontos, die Sie möglicherweise daran hindern, bestimmte Inhalte zu kaufen oder anzusehen. Beheben Sie den Xbox-Fehlercode 8C230002, wenn Sie beim Versuch, Inhalte auf Ihrer Xbox-Konsole anzusehen oder zu kaufen, den Fehlercode 8C erhalten

Als Eingabe nehmen wir das Integer-Array Arr[]. Ziel ist es, mithilfe einer rekursiven Methode die größten und kleinsten Elemente in einem Array zu finden. Da wir Rekursion verwenden, durchlaufen wir das gesamte Array, bis wir Länge = 1 erreichen, und geben dann A[0] zurück, was den Basisfall bildet. Andernfalls wird das aktuelle Element mit dem aktuellen Minimal- oder Maximalwert verglichen und sein Wert für nachfolgende Elemente rekursiv aktualisiert. Schauen wir uns verschiedene Eingabe- und Ausgabeszenarien dafür an −Input −Arr={12,67,99,76,32};Output −Maximum value in the array: 99 Explanation &mi

Die Anzeige von Zahlen in verschiedenen Formaten ist eines der grundlegenden Codierungsprobleme beim Lernen. Verschiedene Codierungskonzepte wie bedingte Anweisungen und Schleifenanweisungen. Es gibt verschiedene Programme, in denen wir Sonderzeichen wie Sternchen verwenden, um Dreiecke oder Quadrate zu drucken. In diesem Artikel drucken wir Zahlen in Spiralform, genau wie Quadrate in C++. Wir nehmen die Anzahl der Zeilen n als Eingabe, beginnen in der oberen linken Ecke und bewegen uns nach rechts, dann nach unten, dann nach links, dann nach oben, dann wieder nach rechts und so weiter und so fort. Spiralmuster mit Zahlen 123456724252627282982340414243309223948494431102138474645321120373635343312191817161514

Das Funktionsprinzip von Ansible kann aus der obigen Abbildung verstanden werden: Die Verwaltungsseite unterstützt drei Methoden: Lokal, SSH und Zeromq, um eine Verbindung zur verwalteten Seite herzustellen. Dieser Teil entspricht der Verbindung Im obigen Architekturdiagramm können Sie den Anwendungstyp HostInventory (Hostliste) verwenden, um entsprechende Vorgänge über verschiedene Module zu implementieren und einen einzelnen Befehl auszuführen -hoc; Der Verwaltungsknoten kann eine Reihe von Aufgaben über Playbooks implementieren, z. B. die Installation und Bereitstellung von Webdiensten, die Stapelsicherung von Datenbankservern usw. Wir können Playbooks einfach so verstehen, wie das System vergeht
