Экспорт функций из .NET'а
От: PetrovichForever Россия  
Дата: 05.12.06 20:00
Оценка:
Знаю, вопрос много раз поднимался.
Тем ни менее рискну: каким образом экспортировать функцию из dll? Часто видел обратный вопрос — как из managed code вызвать unmanaged функцию.

Есть обычное Win-приложение, которое понимает плагины, если класс поддерживает определенный интерфейс — ну стандартная ситуация.
Как реализовать такой плагин.
Не пугает даже написание wrapper'а на MC (уже несколько лет пишу на шарпе, но к своему стыду признаю что множество файлов-классов-кода для написания "Hello World" на native C под винду вызывает у меня состояние прострации).
Проблема в совершенном непонимании как такой wrapper написать на чистом C.
Может кто покажет такую обертку для ... например класса:


public class Test
{
    public double RunTextFunc
    {
        MessageBox.Show("Astalavista!!!");
        return 0.7;
    }
}
Re: Экспорт функций из .NET'а
От: DiverDW Беларусь  
Дата: 05.12.06 20:20
Оценка:
Здравствуйте, PetrovichForever, Вы писали:

PF>Знаю, вопрос много раз поднимался.

PF>Тем ни менее рискну: каким образом экспортировать функцию из dll? Часто видел обратный вопрос — как из managed code вызвать unmanaged функцию.

PF>Есть обычное Win-приложение, которое понимает плагины, если класс поддерживает определенный интерфейс — ну стандартная ситуация.

PF>Как реализовать такой плагин.
PF>Не пугает даже написание wrapper'а на MC (уже несколько лет пишу на шарпе, но к своему стыду признаю что множество файлов-классов-кода для написания "Hello World" на native C под винду вызывает у меня состояние прострации).
PF>Проблема в совершенном непонимании как такой wrapper написать на чистом C.
PF>Может кто покажет такую обертку для ... например класса:


PF>
PF>public class Test
PF>{
PF>    public double RunTextFunc
PF>    {
PF>        MessageBox.Show("Astalavista!!!");
PF>        return 0.7;
PF>    }
PF>}
PF>


Есть такой вариант:
Установить атрибут [ComVisible(true)] и зарегистрировать компонент как COM объект. А уже КОМ можно много откуда вызывать. Хотя на чистом C не вызовешь -- можно, к примеру, написать врапер на C++ в виде DLL, и из C обращаться к этой длл. Но по-моему легче си выучить.
Re[2]: Экспорт функций из .NET'а
От: Unhandled_Exception Россия  
Дата: 05.12.06 20:51
Оценка:
Здравствуйте, DiverDW, Вы писали:

DDW>Есть такой вариант:

DDW>Установить атрибут [ComVisible(true)] и зарегистрировать компонент как COM объект. А уже КОМ можно много откуда вызывать. Хотя на чистом C не вызовешь

это почему не вызовешь? создать ком-объект и дергать его методы можно хоть из асма
Re[3]: Экспорт функций из .NET'а
От: DiverDW Беларусь  
Дата: 05.12.06 21:03
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>это почему не вызовешь? создать ком-объект и дергать его методы можно хоть из асма


Просто никогда таким не занимался. КОМ ориентирован на ООП — вот и логичнее использовать соответствующие языки. Хотел бы я посмотреть связку ком и асма.
Re[4]: Экспорт функций из .NET'а
От: Unhandled_Exception Россия  
Дата: 05.12.06 21:37
Оценка:
Здравствуйте, DiverDW, Вы писали:

DDW>Просто никогда таким не занимался. КОМ ориентирован на ООП — вот и логичнее использовать соответствующие языки. Хотел бы я посмотреть связку ком и асма.


да ничего там особенного получил указатель на таблицу виртуальных методов и вызывай на здоровье, что хочешь...
Re[5]: Экспорт функций из .NET'а
От: PetrovichForever Россия  
Дата: 06.12.06 00:09
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

U_E>Здравствуйте, DiverDW, Вы писали:


DDW>>Просто никогда таким не занимался. КОМ ориентирован на ООП — вот и логичнее использовать соответствующие языки. Хотел бы я посмотреть связку ком и асма.


U_E>да ничего там особенного получил указатель на таблицу виртуальных методов и вызывай на здоровье, что хочешь...


Бааалллииин ...
Покажите как из C++ вызвать приведенный шарпный код и дальше ход LISP используйте
Re: Экспорт функций из .NET'а
От: Аноним  
Дата: 06.12.06 01:12
Оценка:
DiverDW:

Здравствуйте, PetrovichForever, Вы писали:

PF>Знаю, вопрос много раз поднимался.

PF>Тем ни менее рискну: каким образом экспортировать функцию из dll? Часто видел обратный вопрос — как из managed code вызвать unmanaged функцию.

PF>Есть обычное Win-приложение, которое понимает плагины, если класс поддерживает определенный интерфейс — ну стандартная ситуация.

PF>Как реализовать такой плагин.
PF>Не пугает даже написание wrapper'а на MC (уже несколько лет пишу на шарпе, но к своему стыду признаю что множество файлов-классов-кода для написания "Hello World" на native C под винду вызывает у меня состояние прострации).
PF>Проблема в совершенном непонимании как такой wrapper написать на чистом C.
PF>Может кто покажет такую обертку для ... например класса:


PF>





PF>public class Test

PF>{
PF> public double RunTextFunc
PF> {
PF> MessageBox.Show("Astalavista!!!");
PF> return 0.7;
PF> }
PF>}
PF>

Есть такой вариант:
Установить атрибут [ComVisible(true)] и зарегистрировать компонент как COM объект. А уже КОМ можно много откуда вызывать. Хотя на чистом C не вызовешь -- можно, к примеру, написать врапер на C++ в виде DLL, и из C обращаться к этой длл. Но по-моему легче си выучить.
Вариант с COM врятли подойдет, т.к. плагины требуют обычно, чтоб длл имела определенные API. я видел где то давно как на дотнете делаются апи, но статью не помню, знаю что ссылку давал SergeyP трясите его
--------------
Любое удобство идет за счет мегагерцеф! : {<b>1</b>, <b>2</b>, <b>3</b>, 4}


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Экспорт функций из .NET'а
От: PetrovichForever Россия  
Дата: 06.12.06 09:47
Оценка:
Здравствуйте, Nimnul, Вы писали:


N>Есть такой вариант:

N>Установить атрибут [ComVisible(true)] и зарегистрировать компонент как COM объект. А уже КОМ можно много откуда вызывать. Хотя на чистом C не вызовешь -- можно, к примеру, написать врапер на C++ в виде DLL, и из C обращаться к этой длл. Но по-моему легче си выучить.
N>Вариант с COM врятли подойдет, т.к. плагины требуют обычно, чтоб длл имела определенные API. я видел где то давно как на дотнете делаются апи, но статью не помню, знаю что ссылку давал SergeyP трясите его

Жаль, но на пару строк кода конкретного wrapper'а для конкретного класса мне расчитывать видимо не приходится ...
Re: Экспорт функций из .NET'а
От: Sinclair Россия https://github.com/evilguest/
Дата: 06.12.06 10:01
Оценка:
Здравствуйте, PetrovichForever, Вы писали:

PF>Знаю, вопрос много раз поднимался.

PF>Тем ни менее рискну: каким образом экспортировать функцию из dll?
Никак. Точка.
PF>Часто видел обратный вопрос — как из managed code вызвать unmanaged функцию.

PF>Есть обычное Win-приложение, которое понимает плагины, если класс поддерживает определенный интерфейс — ну стандартная ситуация.

Не вполне понятно , что такое "если класс поддерживает определенный интерфейс".
Что такое "класс"? Delphi класс пойдет? Или нужен С++? Если С++, то какой? Или это COM-класс?
Вкратце: если ты это приложение только что сам придумал, то быстро перепридумай его на дотнете.
Если это чужое приложение, то у него должна быть спецификация на протокол взаимодействия с плагинами. Перечитай спецификацию еще раз и задай более корректный вопрос.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Экспорт функций из .NET'а
От: PetrovichForever Россия  
Дата: 06.12.06 10:37
Оценка:
Здравствуйте, Sinclair, Вы писали:


PF>>Есть обычное Win-приложение, которое понимает плагины, если класс поддерживает определенный интерфейс — ну стандартная ситуация.

S>Не вполне понятно , что такое "если класс поддерживает определенный интерфейс".
S>Что такое "класс"? Delphi класс пойдет? Или нужен С++? Если С++, то какой? Или это COM-класс?
S>Вкратце: если ты это приложение только что сам придумал, то быстро перепридумай его на дотнете.
S>Если это чужое приложение, то у него должна быть спецификация на протокол взаимодействия с плагинами. Перечитай спецификацию еще раз и задай более корректный вопрос.

Ответил на то что непонятно, а что понятно — не заметил
Ок, мне нужно реализовать возможность из native-приложения вызвать метод RunTextFunc через wrapper (без привлечения COM-альтилерии):


// File Test.cs
public class Test
{
    public double RunTextFunc
    {
        MessageBox.Show("Astalavista!!!");
        return 0.7;
    }
}


Кстати, вчера нашел ссылку, где человек обьясняет как редактированием полученного il-кода (ну и повторной компиляцией) сделать managed методы видимыми из unmanaged-кода. Попахивает фальсификацией, так что сегодня вечером буду пробовать (хотя мне кажется это невозможно сделать потому что невозможно сделать никогда, но тем ни менее ...).
Re: Экспорт функций из .NET'а
От: ncoder  
Дата: 06.12.06 11:08
Оценка: 4 (1)
здесь
Автор: dub
Дата: 16.10.06


там есть ссылки и на статьи тоже..
читать до конца
Re[2]: Экспорт функций из .NET'а
От: PetrovichForever Россия  
Дата: 06.12.06 11:12
Оценка:
Здравствуйте, ncoder, Вы писали:


N>здесь
Автор: dub
Дата: 16.10.06


N>там есть ссылки и на статьи тоже..

N>читать до конца

Как раз то что я нашел вчера — экспорт функций из managed кода.
Значит таки работает!
Будем пробовать!!!
Спасибо.

Кстати, вопрос с wrapper'ом все равно остается актуален. Если знающий челоек сможет помочь строчками кода — буду оч. благодарен!
Re: Экспорт функций из .NET'а
От: AlexDP Украина  
Дата: 06.12.06 11:45
Оценка:
"PetrovichForever" <35795@users.rsdn.ru> сообщил/сообщила в новостях
следующее: news:2250720@news.rsdn.ru...
> Знаю, вопрос много раз поднимался.
> Тем ни менее рискну: каким образом экспортировать функцию из dll? Часто
> видел обратный вопрос — как из managed code вызвать unmanaged функцию.
>
> Есть обычное Win-приложение, которое понимает плагины, если класс
> поддерживает определенный интерфейс — ну стандартная ситуация.
> Как реализовать такой плагин.
> Не пугает даже написание wrapper'а на MC (уже несколько лет пишу на шарпе,
> но к своему стыду признаю что множество файлов-классов-кода для написания
> "Hello World" на native C под винду вызывает у меня состояние прострации).
> Проблема в совершенном непонимании как такой wrapper написать на чистом C.
> Может кто покажет такую обертку для ... например класса:

Есть такой файл-менеджер ФАр.
Для него пишут плагины, в том числе и на .нет.

Вобщем погугли на эту тему или скачай свежий дистрибутив фара, наверняка там
уже добавлены примеры, как писать плагины на .нет.
Posted via RSDN NNTP Server 2.0
Re[3]: Экспорт функций из .NET'а
От: Sinclair Россия https://github.com/evilguest/
Дата: 06.12.06 11:59
Оценка: -2
Здравствуйте, PetrovichForever, Вы писали:
PF>Жаль, но на пару строк кода конкретного wrapper'а для конкретного класса мне расчитывать видимо не приходится ...
Естественно нет. Это называется ССЗБ: ты придумал задачу, которую не надо решать.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Экспорт функций из .NET'а
От: PetrovichForever Россия  
Дата: 06.12.06 14:21
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, PetrovichForever, Вы писали:

PF>>Жаль, но на пару строк кода конкретного wrapper'а для конкретного класса мне расчитывать видимо не приходится ...
S>Естественно нет. Это называется ССЗБ: ты придумал задачу, которую не надо решать.

Незнание проблемы не отменяет проблемы.
Еще более просто описать задачу именно для Вас я не в состоянии. Извините.
Вы не поймете о чем идет речь пока не возникнет потребность.

О том что задача не выдумана говорит хотя бы факт наличия двух страниц с ответами.
Итог — вызов managed кода из unmanaged:


Спасибо.
Тему можно считать закрытой.
Re[4]: Экспорт функций из .NET'а
От: Аноним  
Дата: 13.12.06 00:46
Оценка:
второй вариант лучше
Любое удобство идет за счет мегагерцеф! : {<b>1</b>, <b>2</b>, <b>3</b>, 4, 5}


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.