Привет !
Может кто посоветует, насколько реально писать плагины к фотошопу на С#.
Плагин представляет из себя DLL-ку с внешней функцией,
к которой обращается фотошоп при обращении к плагину.
void ENTRYPOINT (....)
{
......
}
Мне как минимум не понятно, как можно такую функцию описать в библиотеке в C#.
Т.е. в VC++ эта функция экспортируется в DEF файле:
LIBRARY MyFilter
DESCRIPTION 'Photoshop filter'
EXPORTS
ENTRYPOINT @1
И после компиляции библиотеки можно ее увидеть как минимум с помощью "View Dependencies",
а вот как сделать аналогичную библиотеку с помощью C# не понятно. Т.е. DLL-ки то собираются,
но с помощью "View Dependencies" ничего увидеть не удается...
Буду благодарен любой информации
Спасибо
Если очень хочется, то делай DLL на С# и потом вызывай её из другой DLL, написанной на MC++, в которой как раз и экспортируешь функцию ENTRYPOINT.
#using <mscorlib.dll>
#using "CSharp.dll"
extern "C"
{
void __declspec(dllexport) ENTRYPOINT(...)
{
MyNamespace::MyClass::MyFunc();
}
}
а в CSharp.dll
namespace MyNamespace
{
public class MyClass
{
public static void MyFunc()
{
MessageBox.Show("Someone calls ENTRYPOINT function!");
}
}
}
Здравствуйте Аноним, Вы писали:
А>Интересно, почему нельзя экспортировать функции из C#,
А>т.е. исходя из каких соображений это не реализовали ?
0. А зачем?
1. Функции всегда принадлежат какому-то классу. С# в отличии от CLR не поддерживает глобальных функций.
2. Сигнатура функций в С# совсем не та же, что и в С++.
3. Функции в С# dll содержаться в ввиде IL, а не ассемблера.
ну и т.д.
Здравствуйте Mishka.NET, Вы писали:
M.NET>Если очень хочется, то делай DLL на С# и потом вызывай её из другой DLL, написанной на MC++, в которой как раз и экспортируешь функцию ENTRYPOINT.
M.NET>M.NET>#using <mscorlib.dll>
M.NET>#using "CSharp.dll"
M.NET>extern "C"
M.NET>{
M.NET> void __declspec(dllexport) ENTRYPOINT(...)
M.NET> {
M.NET> MyNamespace::MyClass::MyFunc();
M.NET> }
M.NET>}
M.NET>
M.NET>а в CSharp.dll
M.NET>M.NET>namespace MyNamespace
M.NET>{
M.NET> public class MyClass
M.NET> {
M.NET> public static void MyFunc()
M.NET> {
M.NET> MessageBox.Show("Someone calls ENTRYPOINT function!");
M.NET> }
M.NET> }
M.NET>}
M.NET>