یکی از جذابترین کارهایی که در کار برنامه نویسی میتوان انجام داد این است که بتوانیم از کدهای یک زبان دیگر، در زبانی دیگر استفاده کنیم. بسیاری از کاربران این سایت مدتهاست که از دات نت استفاده میکنند و ممکن است بخواهند از dllهای آن در الکترون بهره ببرند. در این مقاله بررسی میکنیم که چگونه از کدهای دات نت در الکترون استفاده کنیم. ابتدا یک پروژهی Class Library جدید را برای برنامهی فاکتوریل با کد زیر تولید میکنیم:
namespace electron_factorial
{
public class MyMath
{
public int Factorial(int number)
{
if (number < 2)
return number;
return Factorial(number - 1)*number;
}
public Task<object> CalcFactorial(object obj)
{
return Task.Factory.StartNew(() => Factorial((int) obj) as object);
}
}
}
باید توجه داشته باشید متدی که در الکترون صدا میزنید باید دارای آرگومانهای object و خروجی <Task<Object باشد. برای آشنایی با دستور task مقالات
اصول کدنویسی موازی در سایت جاری را مطالعه فرمایید.
سپس کتابخانه تولید شده را به داخل دایرکتوری پروژه انتقال میدهیم. پروژه
electron-edge را در پروژه صدا میزنیم؛ این پروژه که برای الکترون بهینه شده است از روی پروژه
Edge فورک شده است که برای خروجی دات نت در node.js تولید شده بود.
npm install electron-edge
حالا کد زیر را مینویسیم:
<script>
function myFunction()
{
var edge = require('electron-edge');
var CalcFactorial = edge.func({
assemblyFile: 'electron-factorial.dll',
typeName: 'electron_factorial.MyMath',
methodName: "CalcFactorial"
});
document.getElementById("calc").addEventListener("click", function (e) {
var inputText = document.getElementById("txtnumber").value;
CalcFactorial(Number(inputText), function (error, result) {
document.getElementById("factorial").value=result;
});
});
}
</script>
در ابتدای امر، کلاسی از جنس edge را میسازیم و با استفاده از متد func، اطلاعات کتابخانهی دات نت را به عنوان آرگومان وارد میکنیم. از این پس CalcFactirial به متد مورد نظر ما در dll اشاره میکند. هنگام استفاده از آن هم باید مدنظر داشته باشید با توجه به استفاده از برنامه نویسی موازی، پاسخ تابع به صورت یک callback در اختیار ما قرار میگیرد که اولین پارامتر آن خطاست و در صورت رخ دادن، مزین به اطلاعات خطا شده که میتوانید آن را Throw کنید و در غیر این صورت نال بازگشت داده میشود و پارامتر دوم هم در صورتیکه به خطایی برخورد نکنیم، پاسخ تابع را برای ما ارسال خواهد کرد.