DLL проблемка !!!
От: mr_alf  
Дата: 19.02.06 21:45
Оценка:
Здравствуйте!!!
У меня такой вопрос. Может он кому-то покажется глупым, но
к сожалению я по этой тематике никак не могу нигде ничего
найти. Обьясняю суть проблемы.
Предположн у нас есть класс который хранится в dll библиотеке
и этот класс имеет какой либо интерфейс: Пример

////// Компилирую как dll /////////////////////////////////
using System;
using System.Collections.Generic;
using System.Text;

namespace MyInterfaceNameSpace
{
public interface MyInterface
{
int func1(int a);
int func2(int b);
}
}

namespace MyNameSpace
{

public class MyClass : MyInterfaceNameSpace.MyInterface
{
public int func1(int a){ return a; }
public int func2(int b){ return b; }
}
}
////////////////////////////////////////////////////////////

После чего я хочу эту библиотеку динамически подключить. То есть
не в Reference прописать путь к этой библиотеке и воспользоваться
ей а при помощи Assembly.LoadFile();
Пример:
/// сначала я также описываю интерфейс
public interface MyInterface
{
int func1(int a);
int func2(int b);
}
/// и потом пытаюсь сделать следующее
Assembly assembly;
Type type;
assembly =
Assembly.LoadFrom("ClassLibrary1.dll"); // путь к библиотеке
type = assembly.GetType("MyNameSpace.MyClass", true);

// и вот тут у я и не знаю что написать
// но я хочу привести мой класс к моему интерфейсу

// в абстракции это типа
// MyInterface mint = type as MyInterface;
// но так естественно не работает

Может быть я бьюсь в закрытую дверь и этого сделать невозможно!
DLL проблемка !!!
От: Аноним  
Дата: 19.02.06 21:58
Оценка:
Вам нужно assembly.GetType заменить на assembly.CreateInstance.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: DLL проблемка !!!
От: mr_alf  
Дата: 20.02.06 10:55
Оценка:
Здравствуйте, SergeyP, Вы писали:

SP>Вам нужно assembly.GetType заменить на assembly.CreateInstance.


Спасибо что ответили!!!
Если я вас правильно понял то я должен сделать следующее:
/////Сначала определяю интерфейс такой-же как в библиотеке/////////////
public interface MyInterface
{
int func1(int a);
int func2(int b);
}

/////Затем в тексте программы////////////////////////////////////
Assembly assembly;
Type type;
Object obj;

assembly = Assembly.LoadFrom("ClassLibrary1.dll");
obj = assembly.CreateInstance("MyNameSpace.MyClass");
MyInterface mint = obj as MyInterface;
////////////////////////////////////////////////////////////////
Но к сожалению так тоже не получается. Может я вас не правильно понял.
Спасибо за ваш ответ
Re[2]: DLL проблемка !!!
От: Аноним  
Дата: 20.02.06 23:57
Оценка:
Assembly assembly;
Type type;
Object obj;

assembly = Assembly.LoadFrom("ClassLibrary1.dll"); // OK
obj = assembly.CreateInstance("MyNameSpace.MyClass"); // OK
MyInterface mint = obj as MyInterface; // FALSE.

Nobody knows what it is 'MyInterface' ?
Or you use reflection( LoadAssembly... ) or reference of assemble to the project.
Re[3]: DLL проблемка !!!
От: mr_alf  
Дата: 21.02.06 11:51
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Assembly assembly;

А>Type type;
А>Object obj;

А>assembly = Assembly.LoadFrom("ClassLibrary1.dll"); // OK

А>obj = assembly.CreateInstance("MyNameSpace.MyClass"); // OK
А>MyInterface mint = obj as MyInterface; // FALSE.

А>Nobody knows what it is 'MyInterface' ?

А>Or you use reflection( LoadAssembly... ) or reference of assemble to the project.

Я же в первом своем сообщении написал, что этот интерфейс одинаковым образом определен
и в библиотеке и в файле который эту библиотеку тянет.
Может я просто неправильно понимаю принцип работы интерфейсов.
Re: DLL проблемка !!!
От: Аноним  
Дата: 20.02.06 19:13
Оценка:
>... Если я вас правильно понял то я должен сделать следующее:
/////Сначала определяю интерфейс такой-же как в библиотеке/////////////


Нет, Вы должны один раз описать interface и реализовывать его в классе, который подгружаете динамически и в самом приложении (в том, в которое загружаете), иначе у Вас получается два разных интерфейса.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: DLL проблемка !!!
От: Аноним  
Дата: 20.02.06 20:06
Оценка:
>Нет, Вы должны один раз описать interface и реализовывать его в классе, который подгружаете динамически и в самом приложении (в том, в которое загружаете), иначе у Вас получается два разных интерфейса.

Я имел ввиду " ... и использовать в самом приложении ..."


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: DLL проблемка !!!
От: Аноним  
Дата: 21.02.06 13:51
Оценка:
Извините за полный бред который я написал в прошлый раз Просто я не видел ответов на этом
форуме, я был на форуме RSDN.
Теперь у меня возникает другой вопрос. А как правильно выдернуть интерфейс из подключаемой dll.
Я конечно извиняюсь за свои может быть глупые вопросы но к сожалению я действительно ничего толкового не могу найти по этой тематике.
Заранее спасибо.



данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: DLL проблемка !!!
От: Аноним  
Дата: 21.02.06 13:59
Оценка:
> ... А как правильно выдернуть интерфейс из подключаемой dll. ...

У Вас должно быть как минимум 3 сборки: в сборке I Вы описываете interface, затем подключаете эту сборку в references сборки P(plugin) и сборки A (application), таким образом этот интерфейс будет доступен в compile time в обоих сборках.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: DLL проблемка !!!
От: Аноним  
Дата: 21.02.06 14:50
Оценка:
Спасибо сейчас попробую!!!


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: DLL проблемка !!!
От: Аноним  
Дата: 21.02.06 19:14
Оценка:
Большое спасибо вы мне очень помогли!!!
А где вы черпаете знания по обьектному программированию на C#. Я ни разу не видел книг
с такой тематикой именно по C#.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: DLL проблемка !!!
От: Аноним  
Дата: 23.02.06 03:40
Оценка:
"Учимся программировать на C# вместе с Джоном Смайли", Джон Смайли, ДиаСофт, '03,

"С# и платформа .NET", Эндрю Троелсен, Апресс Питер, '02, www.piter.com

"Программирование на платформе .NET", Деймьен Уоткинз, Марк Хаммонд, Бред Эйбрамз, Вильямс, '03


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[4]: DLL проблемка !!!
От: HotDog Швейцария www.denebspace.com
Дата: 24.02.06 07:33
Оценка:
_>А где вы черпаете знания по обьектному программированию на C#. Я ни разу не видел книг
_>с такой тематикой именно по C#.

_>данное сообщение получено с www.gotdotnet.ru


Учимся пользоваться поиском на форуме RSDN
Подобные вопросы возникают с периодичностью в месяц, два.. и уже не раз обсосаны во всех доступных формах.

Удачи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.