Я по локальной сети принимаю *.dll в виде потока байтов.Сохраняю на диске.И тут мне надо вызвать определенную функцию из этой библиотеки.Т.е. поначалу во время компиляци и исполнения библиотеки нет.Она появляется только во время исполнения программы.
Подскажите плз как вызвать метод из такой библиотеки .
Заранее БЛАГОДАРЕН !
Как вызвать метод из динамической библиотеки в С# ???
Здравствуйте, Fotick1983, Вы писали:
F>Я по локальной сети принимаю *.dll в виде потока байтов.Сохраняю на диске.И тут мне надо вызвать определенную функцию из этой библиотеки.Т.е. поначалу во время компиляци и исполнения библиотеки нет.Она появляется только во время исполнения программы.
F>Подскажите плз как вызвать метод из такой библиотеки .
F>Заранее БЛАГОДАРЕН !
Здравствуйте, Fotick1983, Вы писали:
F>Я по локальной сети принимаю *.dll в виде потока байтов.Сохраняю на диске.И тут мне надо вызвать определенную функцию из этой библиотеки.Т.е. поначалу во время компиляци и исполнения библиотеки нет.Она появляется только во время исполнения программы.
F>Подскажите плз как вызвать метод из такой библиотеки .
F>Заранее БЛАГОДАРЕН !
Например нужно вызвать DemoMethod метод из следующего класса (предположим что сборку именно для этого класса мы получили по сети и сохранили с именем "RSDNDemo.dll" в рабочем каталоге нашего основного приложения... )
namespace RSDNDemo
{
public class LoadedType
{
public LoadedType()
{
}
public string DemoMethod(string text)
{
return text.ToUpper();
}
}
}
Для этого пишем приблизительно следующее:
using System;
using System.Reflection;
namespace RSDNDemo
{
class DemoTest
{
[STAThread]
static void Main(string[] args)
{
Assembly asm = Assembly.LoadFrom("RSDNDemo.dll"); //1
Type dynType = asm.GetType("RSDNDemo.LoadedType");//2object instance = Activator.CreateInstance(dynType);//3object res=dynType.InvokeMember("DemoMethod",//4
BindingFlags.Public
| BindingFlags.InvokeMethod
| BindingFlags.Instance,
null,
instance,new object[]{"demo test"});
Console.WriteLine(res); //5
Console.WriteLine("\nPress Enter for exit ...");
Console.ReadLine();
}
}
}
Небольшие пояснения:
//1 — загружаем полученную сборку ("RSDNDemo.dll")
//2 — получаем из загруженной сборки нужный нам тип, незабыв указать полное имя типа ("RSDNDemo.LoadedType")
//3 — создаем экземпляр полученного типа (object instance)
//4 — вызываем нужный метод ("DemoMethod"), передав в качестве параметра — new object[]{"demo test"} (подробнее посмотрите документацию по Type.InvokeMethod() )
//5 — выводим на экран результат выполнения метода "DemoMethod" динамически загруженого типа "RSDNDemo.LoadedType"
Результат, как Вы догадались , будет:
DEMO TEST
Press Enter for exit ...
Re: Как вызвать метод из динамической библиотеки в С# ???
В ваших постах тоже все правильно , но человек все же говорил что он записывает масив байт на диск:
Я по локальной сети принимаю *.dll в виде потока байтов.Сохраняю на диске.И тут мне надо вызвать определенную функцию из этой библиотеки.Т.е. поначалу во время компиляци и исполнения библиотеки нет.Она появляется только во время исполнения программы.
К тому же в заголовке поста сказано о С# (при всем моем уважении к VB.NET)
Re[2]: Как вызвать метод из динамической библиотеки в С# ???
От:
Аноним
Дата:
21.03.05 07:56
Оценка:
Вобщето язык Basic можно смело назвать алгоритмическим языком , покажите мне человека который знает C и не знает B))
А воворых навернека человек просто не знал что на диск можно и не записывать))
Здравствуйте, _NT_, Вы писали:
_NT>Здравствуйте, Fotick1983, Вы писали:
_NT>Например нужно вызвать DemoMethod метод из следующего класса (предположим что сборку именно для этого класса мы получили по сети и сохранили с именем "RSDNDemo.dll" в рабочем каталоге нашего основного приложения... )
Спасибо за такой подробный ответ.Очень признателен !
Но вот забыл самое главное : библиотека эта написанная на С++. И еще я точно знаю как называется функция, которую мне надо вызвать из этой библиотеке.
Подскажите плз _NT как на этот раз сделать ???
Заранее БЛАГОДАРЕН !
Re[3]: Как вызвать метод из динамической библиотеки в С# ???
Здравствуйте, Аноним, Вы писали:
А>А воворых навернека человек просто не знал что на диск можно и не записывать))
Я знаю что на диск можно не записывать.
Но вы только представьте если библиотека окажется сильно большой.Если на диске не сохранять то этот поток байт прийдется держать в оперативной памяти.А это значит потеря производительности.
С Уважением Fotick1983
Re[2]: Как вызвать метод из динамической библиотеки в С# ???
От:
Аноним
Дата:
21.03.05 10:15
Оценка:
"написанная на С++" — это в смысле unmanaged?
"точно знаю как называется функция" — а еще это как?
Здравствуйте, AndroidLV , Вы писали:
А>"написанная на С++" — это в смысле unmanaged?
совершенно верно!
А>"точно знаю как называется функция" — а еще это как?
мне по сети передают *.dll(написанную на С++) в виде потока байт.Я сохраняю эту библиотеку на диск.Разработчик этой библиотеки сказал мне какую функцию(сказал название) надо вызвать из этой библиотеки.
А я не знаю как это сделать
Re[4]: Как вызвать метод из динамической библиотеки в С# ???
От:
Аноним
Дата:
21.03.05 13:24
Оценка:
Здравствуйте, Fotick1983, Вы писали:
F>Здравствуйте, AndroidLV , Вы писали:
А>>"написанная на С++" — это в смысле unmanaged?
F>совершенно верно!
А>>"точно знаю как называется функция" — а еще это как?
F>мне по сети передают *.dll(написанную на С++) в виде потока байт.Я сохраняю эту библиотеку на диск.Разработчик этой библиотеки сказал мне какую функцию(сказал название) надо вызвать из этой библиотеки.
F>А я не знаю как это сделать
копай [DllImport]
Re[5]: Как вызвать метод из динамической библиотеки в С# ???
Здравствуйте, AndroidLV, Вы писали:
А>копай [DllImport]
Спасибо !
Мне кажется что будет ошибка компиляции , так как на этапе разработки этой библиотеки на диске нет.Оно наверное будет матюкаться...
Но я сейчас попробую такое проделать
Re[5]: Как вызвать метод из динамической библиотеки в С# ???
Фотик я тебе дал полный ответ на твой вопрос, я делал так как хочешь сделать ты, так вот на счет оперативки не беспокойся когда ты загрузишь сборку(а она в любом случае должна быть загруженна, если ты хочешь чтоб она работала) то массив тебе больше не нужен, следовательно он будет уничтожен, если ты конечно не сделаеш его полем класса который постоянно работает.
Здравствуйте, vb95, Вы писали:
А>Фотик я тебе дал полный ответ на твой вопрос, я делал так как хочешь сделать ты, так вот на счет оперативки не беспокойся когда ты загрузишь сборку(а она в любом случае должна быть загруженна, если ты хочешь чтоб она работала) то массив тебе больше не нужен, следовательно он будет уничтожен, если ты конечно не сделаеш его полем класса который постоянно работает.
Ok.Сбасибо огромное тебе. +1
Re: Как вызвать метод из динамической библиотеки в С# ???
Здравствуйте, Fotick1983, Вы писали:
F>Я по локальной сети принимаю *.dll в виде потока байтов.Сохраняю на диске.И тут мне надо вызвать определенную функцию из этой библиотеки.Т.е. поначалу во время компиляци и исполнения библиотеки нет.Она появляется только во время исполнения программы.
F>Подскажите плз как вызвать метод из такой библиотеки .
F>Заранее БЛАГОДАРЕН !
всё просто, как два рубля
using System;
using System.Runtime.InteropServices;
namespace ns
{
public class Runner
{
[DllImport("user32")]
public static extern int MessageBox(int hWnd, String pText, String pCaption, int uType);
[STAThread]
public static void Main()
{
MessageBox(0, "message", "title", 0);
}
}
}
это можно компилить и запускать
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Re: Как вызвать метод из динамической библиотеки в С# ???
От:
Аноним
Дата:
24.03.05 03:07
Оценка:
[DllImport("user32")] — причем здесь это? разве DllImport работает по сети? или он способен загружать .Net библиотеки?