আমি কীভাবে নোড.জেএস থেকে সি ++ লাইব্রেরি ব্যবহার করতে পারি?
আমি কীভাবে নোড.জেএস থেকে সি ++ লাইব্রেরি ব্যবহার করতে পারি?
উত্তর:
নোড-এফফি তাকান ।
খাঁটি জাভাস্ক্রিপ্ট ব্যবহার করে ডায়নামিক লাইব্রেরি লোড এবং কল করার জন্য নোড-এফআই হ'ল একটি নোড.জেএস অ্যাডোন। এটি কোনও সি ++ কোড না লিখে নেটিভ লাইব্রেরিতে বাইন্ডিং তৈরি করতে ব্যবহৃত হতে পারে।
এখন এই প্রশ্নের একটি নতুন উত্তর আছে। SWIG , সংস্করণ 3.0 হিসাবে নোড.জেএস, ওয়েবকিট এবং ভি 8 এর জন্য জাভাস্ক্রিপ্ট ইন্টারফেস জেনারেটর সরবরাহ করে ।
আমি জাভা এবং পাইথনের জন্য কিছু সময়ের জন্য এসডব্লিউআইজি ব্যবহার করছি, এবং আপনি যখন বুঝতে পারবেন যে SWIG কীভাবে কাজ করে, তখন SWIG যে ভাষাগুলিতে সি ++ কোড ইন্টারফেসিংয়ের জন্য প্রয়োজন হয় প্রায় কোনও প্রচেষ্টা (এফআই বা লক্ষ্য ভাষার সমতুল্যের তুলনায়) প্রয়োজন হয় না S সমর্থন।
একটি ছোট উদাহরণ হিসাবে, বলুন যে আপনার শিরোনাম myclass.h সহ একটি লাইব্রেরি আছে:
#include<iostream>
class MyClass {
int myNumber;
public:
MyClass(int number): myNumber(number){}
void sayHello() {
std::cout << "Hello, my number is:"
<< myNumber <<std::endl;
}
};
নোডে এই শ্রেণিটি ব্যবহার করার জন্য, আপনি কেবল নীচের SWIG ইন্টারফেস ফাইল (mylib.i) লিখুন:
%module "mylib"
%{
#include "myclass.h"
%}
%include "myclass.h"
বাঁধাই ফাইলটি বাইন্ডিং.gyp তৈরি করুন:
{
"targets": [
{
"target_name": "mylib",
"sources": [ "mylib_wrap.cxx" ]
}
]
}
নিম্নলিখিত আদেশগুলি চালান:
swig -c++ -javascript -node mylib.i
node-gyp build
এখন, একই ফোল্ডার থেকে নোড চলমান, আপনি এটি করতে পারেন:
> var mylib = require("./build/Release/mylib")
> var c = new mylib.MyClass(5)
> c.sayHello()
Hello, my number is:5
যদিও আমাদের এইরকম ছোট্ট উদাহরণের জন্য 2 টি ইন্টারফেস ফাইল লেখার দরকার ছিল, নোট করুন যে কীভাবে আমাদের MyClass
কনস্ট্রাক্টর বা sayHello
পদ্ধতিটি কোথাও উল্লেখ করতে হয়নি , এসডাব্লুআইজি এই জিনিসগুলি আবিষ্কার করে এবং স্বয়ংক্রিয়ভাবে প্রাকৃতিক ইন্টারফেস তৈরি করে।
std::vector<>
উদাহরণস্বরূপ, ন্যায়সঙ্গত %include "std_vector.i"
) এবং আপনি এটি জাভাস্ক্রিপ্টের দিক থেকে কিছুটা বিশ্রী পথে চালিত করতে সক্ষম হবেন। মনে রাখবেন যে এই পদ্ধতিটি এফএফআই নিজে লেখার চেয়ে এখনও সহজতর এবং নিরাপদ।
আপনি আপনার সি ++ কোডের জন্য বাইন্ডিং সরবরাহ করতে একটি নোড.জেএস এক্সটেনশন ব্যবহার করতে পারেন। এখানে একটি টিউটোরিয়াল দেওয়া হয়েছে যা এতে অন্তর্ভুক্ত রয়েছে:
http://syskall.com/how-to-write-your-own-native-nodejs-extension
আপনি এস-স্ক্রিপ্ট ব্যবহার করতে পারেন সি ++ কোডটি জেএসে সংকলন করতে।
নোড.জেএস এবং সি ++ যুক্ত করার আরও নতুন উপায়। দয়া করে, নানকে লুট করুন ।
সম্পাদনা করুন
সবচেয়ে দ্রুত এবং সহজতম উপায়টি এনবিন্ড । আপনি যদি অ্যাসিঙ্ক্রোনাস অ্যাড-অন লিখতে চান তবে আপনি Asyncworker
নান থেকে ক্লাস একত্র করতে পারেন ।
নোড.জেএস দিয়ে ওয়েবে আপনার সি ++ পাওয়ার বিষয়ে একটি আকর্ষণীয় নিবন্ধ এখানে
নোড.জেএস অ্যাপ্লিকেশনটির সাথে সি ++ কোড একীকরণের তিনটি সাধারণ উপায় - যদিও প্রতিটি বিভাগের মধ্যে প্রচুর প্রকরণ রয়েছে:
- অটোমেশন - একটি শিশু প্রক্রিয়াতে আপনার সি ++ কে স্ট্যান্ড্যালোন অ্যাপ হিসাবে কল করুন।
- ভাগ করা লাইব্রেরি - আপনার সি ++ রুটিনগুলি একটি ভাগ করা লাইব্রেরিতে (dll) প্যাক করুন এবং সরাসরি নোড.জেএস থেকে সেই রুটিনগুলিতে কল করুন।
- নোড.জেএস অ্যাডন - আপনার সি ++ কোড একটি নেটিভ নোড.জেএস মডিউল / অ্যাডন হিসাবে সংকলন করুন।
সুইগ এবং সি ++ সহ কার্যকর: http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn8
সি ++ উত্স ফাইলগুলিতে এসডব্লিউআইজি চালানো (কোনটি .C বা .cxx ফাইলে প্রদর্শিত হবে) বাঞ্ছনীয় নয়। যদিও এসডব্লিউআইজি সি ++ শ্রেণির ঘোষণাগুলি পার্স করতে পারে তবে এটি তাদের মূল শ্রেণীর সংজ্ঞা থেকে ডিক্লোল করা ঘোষণাকে উপেক্ষা করে (ঘোষণাগুলি পার্স করা হয়, তবে প্রচুর সতর্কতা বার্তা উত্পন্ন হতে পারে)। উদাহরণ স্বরূপ:
/* Not supported by SWIG */ int foo::bar(int) { ... whatever ... }
এটি কেবলমাত্র একটি। এইচ ফাইলের মধ্যেই সি ++ শ্রেণি সীমাবদ্ধ।
এছাড়াও, জাভাস্ক্রিপ্ট সমর্থনকারী সুইগের সংস্করণগুলি swig-3.0.1 বা তার পরেরটি।
foo::bar
যেভাবেই হোক সংজ্ঞা দিয়ে do শ্রেণীর সদস্যের সংজ্ঞা বাস্তবায়ন সম্পর্কে; এসডাব্লুআইজি উত্পন্ন যে মোড়কগুলি সমস্ত ইন্টারফেসের সাথে সম্পর্কিত।
extension
। গুগল সি ++ নোডেজ এক্সটেনশন