In lạiTác giả: qq735679552Thời gian cập nhật: 27-09-2022 22:32:09294
CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết blog CFSDN này Series Nodejs sử dụng V8 để viết plug-in C++ được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.
Mặc dù hầu hết các trường hợp hiện nay đều sử dụng n-api để viết các plug-in, nhưng lớp dưới cùng vẫn là v8 (và libuv). Sử dụng v8 để viết các plug-in đơn giản và làm quen với việc sử dụng v8.
Bài viết này giới thiệu các phương pháp viết đơn giản và thường được sử dụng khi viết plug-in C++. Trên thực tế, về bản chất, khó khăn khi viết plug-in nằm ở khả năng cơ bản và sự hiểu biết về libuv và v8. Không dài dòng nữa, chúng ta hãy nhìn vào mã.
#include
không gian tên demo {
sử dụng v8::FunctionCallbackInfo;
sử dụng v8::Isolate;
sử dụng v8::Địa phương;
sử dụng v8::Object;
sử dụng v8::String;
sử dụng v8::Value;
sử dụng v8::FunctionTemplate;
sử dụng v8::Chức năng;
sử dụng v8::Number;
sử dụng v8::MaybeLocal;
sử dụng v8::Context;
sử dụng v8::Int32;
tĩnhsố nguyên tiếp theo;
//Xác định hàm công cụ để tạo seq
void GenSeq(const FunctionCallbackInfo& args) {
Cô lập* cô lập = args.GetIsolate();
args.GetReturnValue().Bộ(Số::Mới(cô lập, ++seq));
}
//Định nghĩa hàm cộng
vô hiệu Thêm vào(const FunctionCallbackInfo& args) {
Cô lập* cô lập = args.GetIsolate();
số nguyên a = đối số[0].BẰNG()->Giá trị();
số nguyên b = đối số[1].BẰNG()->Giá trị();
args.GetReturnValue().Bộ(Số::Mới(cô lập, a + b));
}
void Khởi tạo(
Địa phương
Địa phươngMô-đun ,
Địa phương bối cảnh
) {
Cô lập* cô lập = ngữ cảnh->GetIsolate();
//Tạo mẫu hàm mới
Địa phương func = FunctionTemplate::New(cô lập);
// Tạo một chuỗi mới đại diện cho tên hàm
Địa phương zaylee = String::NewFromUtf8(cô lập, "zaylee", v8::NewStringType::kNormal).ToLocalChecked();
//Đặt tên hàm
hàm->SetClassName(zaylee);
//Đặt thuộc tính nguyên mẫu
chức năng->Mẫu Nguyên mẫu()->Bộ(cô lập, "Trường nguyên mẫu", Number::New(cô lập, 1));
//Đặt thuộc tính đối tượng
chức năng->Mẫu thể hiện()->Bộ(cô lập, "Trường thể hiện", Number::New(cô lập, 2));
chức năng->Mẫu thể hiện()->Bộ(cô lập, "thêm vào", FunctionTemplate::New(cô lập, Thêm vào));
//Đặt thuộc tính của chính đối tượng hàm
chức năng->Bộ(cô lập, "Trường chức năng", Number::New(cô lập, 3));
// Tạo hàm dựa trên mẫu hàm
Địa phương<Chức năng> ret = func->GetFunction(bối cảnh).ToLocalChecked();
Địa phương Demo = String::NewFromUtf8(cô lập, "Thử nghiệm", v8::NewStringType::kNormal).ToLocalChecked();
console.log('Thuộc tính nguyên mẫu:', demo.protoField, '\N');
console.log('Thực thi phương thức thêm:', thử nghiệm.thêm vào(1,2), '\N');
console.log('Thực thi phương thức seq:', genSeq(), genSeq(), '\N');
Cuối cùng viết cấu hình biên dịch.
{
"mục tiêu": [
{
"tên_mục_tiêu": "Bài kiểm tra",
"nguồn": [ "./test.cc" ]
}
]
}
Có vẻ rất đơn giản, quy trình chung như sau.
npm cài đặt -g node-gyp
cấu hình node-gyp
xây dựng node-gyp
nút kiểm tra.js
Có nhiều cách để mở rộng nodejs. Plug-in là một loại, và sửa đổi trực tiếp kernel là một loại khác. Tôi đã giới thiệu cách sửa đổi kernel trước đây.
Địa chỉ gốc: https://mp.weixin.qq.com/s/oJDHYoPuCR7iy7XGp6eHTw.
Cuối cùng, bài viết về cách sử dụng V8 để viết các plug-in C++ trong loạt Nodejs kết thúc tại đây. Nếu bạn muốn biết thêm về cách sử dụng V8 để viết các plug-in C++ trong loạt Nodejs, vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt qua các bài liên quan. Tôi hy vọng tất cả các bạn ủng hộ blog của tôi trong tương lai! .
đóng cửa. Câu hỏi này yêu cầu chi tiết hoặc rõ ràng. Câu trả lời không được chấp nhận vào thời điểm này. Bạn muốn cải thiện câu hỏi này? Thêm chi tiết và làm rõ câu hỏi bằng cách chỉnh sửa bài đăng này Đã đóng 7 năm trước. Bài đăng này đã được 8 tháng rồi
Ngoài việc gỡ lỗi, có công cụ kiểm tra nào cho c, c++ hoặc c# hoạt động giống như các hàm độc lập dán sao chép vào một số hộp văn bản rồi nhập tham số vào các hộp văn bản khác không? Câu trả lời hay nhất Có lẽ bạn sẽ xem xét thử nghiệm đơn vị. Tôi khuyên bạn nên kiểm tra google và google mô phỏng
Tôi muốn di chuyển một cửa sổ (HWND) trong màn hình thứ hai. Vấn đề là tôi đã thử rất nhiều cách như tăng gấp đôi độ phân giải hoặc nhập giá trị âm, nhưng nó không bao giờ đặt cửa sổ trên màn hình thứ hai của tôi. Mọi manh mối về cách thực hiện việc này trong C/C++/C# sẽ hữu ích nhất
Tôi đang tìm kiếm các triển khai hiện có của các loại DES khác nhau trong C/C++/C##. Nền tảng đang chạy của tôi là Windows XP/Vista/7. Tôi đang cố gắng viết chương trình C# sẽ sử dụng thuật toán DES để mã hóa và giải mã. Tôi cần một số thực tế
Thật khó để nói những gì để hỏi ở đây. Câu hỏi không rõ ràng, mơ hồ, không đầy đủ, quá rộng hoặc hùng biện và không thể trả lời hợp lý ở dạng hiện tại. Để được trợ giúp làm rõ vấn đề này để có thể mở lại, hãy truy cập trung tâm trợ giúp Đóng 1.
Có cách nào để buộc một cửa sổ khác ở trên cùng không? Không phải cửa sổ của ứng dụng mà là một cửa sổ khác đang chạy trên hệ thống. (Windows, C/C++/C#) Câu trả lời hay nhấtSetWindowPos(that_window_ha
Giả sử bạn có lựa chọn giữa C/C++ hoặc Csharp và bạn dự định chạy nhiều phiên bản của cùng một máy chủ trên máy chủ Windows và Linux, đâu là lựa chọn thông minh nhất để xây dựng một ứng dụng máy chủ socket? Câu trả lời tốt nhất là như
Bạn có thể cho tôi biết sự khác biệt giữa chúng? Nhân tiện, có thứ gì được gọi là thư viện C++ hay thư viện C không? Câu trả lời hay nhất Thư viện chuẩn C++ và thư viện chuẩn C là các thư viện được xác định theo tiêu chuẩn C++ và C và được cung cấp để các chương trình C++ và C sử dụng. Đó là điểm chung của những từ đó
Trong mã kiểm tra bên dưới, tôi đưa thông tin đầu ra vào phần bình luận. Tôi đang sử dụng gcc 4.8.5 và Centos 7.2. #include #include lớp C { công khai:
Thật khó để nói những gì đang được hỏi ở đây. Câu hỏi mơ hồ, mơ hồ, không đầy đủ, quá rộng hoặc hùng biện và không thể trả lời hợp lý ở dạng hiện tại. Để được trợ giúp làm rõ vấn đề này để bạn có thể mở lại, hãy truy cập trung tâm trợ giúp. Đã đóng
Khách hàng của tôi sẽ sử dụng cấu trúc/lớp được gọi là thông báo để liên lạc với khách hàng. Tôi nghĩ tôi sẽ viết máy chủ bằng C++. Sẽ có nhiều lớp khác nhau kế thừa thông báo. Vấn đề của tôi là gửi các lớp này qua mạng tới máy khách. Tôi nghĩ có lẽ tôi nên sử dụng
Tôi có một dự án mà tôi phải viết một hàm để thực hiện một số thao tác nhất định trên một số dữ liệu. Tôi có thể viết mã bằng C/C++, nhưng tôi không muốn chia sẻ mã của chức năng này với chủ nhân của mình. Thay vào đó, tôi chỉ muốn anh ấy có quyền gọi hàm bằng mã của riêng mình. Có thể được không? Tôi đã nghĩ đến hai phương pháp này - trong
Tôi đang sử dụng API của bên thứ 3 (C/C++) được viết kém. Tôi đang sử dụng nó từ mã được quản lý (C++/CLI). Đôi khi xảy ra "Lỗi vi phạm quyền truy cập". Điều này làm hỏng toàn bộ ứng dụng. Tôi biết tôi không thể xử lý những lỗi này [nếu con trỏ truy cập vào vị trí bộ nhớ không hợp lệ, v.v.
đóng cửa. Câu hỏi này không tuân thủ các nguyên tắc của Stack Overflow. Hiện tại nó không chấp nhận câu trả lời. Chúng tôi không cho phép các câu hỏi tìm kiếm đề xuất về sách, công cụ, thư viện phần mềm, v.v. Bạn có thể chỉnh sửa câu hỏi của mình để trả lời bằng sự kiện và trích dẫn. Đóng cửa 7 năm trước
Đã đóng cửa. Câu hỏi này không tuân thủ nguyên tắc Stack Overflow. Câu trả lời không được chấp nhận vào thời điểm này. Các câu hỏi yêu cầu chúng tôi giới thiệu hoặc tìm các công cụ, thư viện hoặc tài nguyên bên ngoài trang web yêu thích đều không có chủ đề đối với Stack Overflow vì
Tôi là một lập trình viên xuất sắc, rất giỏi!