نقل قول: اجرای dll بدون add کردن
نقل قول:
نوشته شده توسط
limpizik
سلام دوستان.
من قصدم اینه بدون add کردن فایل dll بتونم از فانکشن هاش استفاده کنم.با سرچی ک زدم یه چیزایی دستگیرم شد اما نتونستم اجرا کنم.
ابتدا یه فایل dll ایجاد میکنم به این شکل(لطفا به نام فانکشن و کلاس دقت کنید) :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace class1
{
public class class1
{
public static void func(string str) {
MessageBox.Show(str);
}
}
}
بعد یه پروژه Windows Form Application ایجاد میکنم و این فانکشن ها رو درش میسازم :
(class1 و func)
public static void Run(byte[] dll_byte, object[] dll_obj, string Class, string adress)
{
Assembly byteassem = Assembly.Load(dll_byte);
MethodInfo method_Run = byteassem.GetType(Class).GetMethod(adress);
method_Run.Invoke(null, dll_obj);
}
//////////////////////////////////
public static void Load_Dll(string str)
{
byte[] dll_path = File.ReadAllBytes("MyDllFile.dll");
Run(dll_path, new object[] { str }, "class1", "func");
}
و بعد یه جا با این فراخوانیش میکنم :
Load_Dll("Peigham");
و در نهایت کد کامپایل میشه اما در هنگام اجرا با خطا مواجه میشه.
ممنون میشم کمک کنید
سلام
اول باید اسمبلی رو بارگزاری کنی:
var assembly = Assembly.LoadFrom( assemblyFile );
سپس باید از کلاسی که مد نظرت هست instance بسازی:
var type = assembly.GetType( typeName );
var instance = Activator.CreateInstance( type, nameSpace ) as MyClass;
به همین راحتی.
البته یه نکتهی مهم هم وجود داره. اون هم اینه که کلاس MyClass باید هم تو برنامهی اصلی و هم در dll شما وجود داشته باشه. و این امکان نداره مگه این که یه dll دیگهای وجود داشته باشه
که هم جزو resourceهای برنامهی اصلی باشه و هم dll ای که به صورت پویا داره بارگزاری میشه.
البته معمولاً تو این موارد بجای کلاس از interface استفاده میشه.
صبا صبوحی