Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Как вызвать метод процесса в C#?

1314  1 2 все
  femidav прохожий08.05.08 15:24
NEW 08.05.08 15:24 
в ответ HMr 08.05.08 14:45
Как говорится, сеть в помощь - http://en.wikipedia.org/wiki/Inter-process_communication
#21 
Murr коренной житель08.05.08 17:38
Murr
08.05.08 17:38 
в ответ HMr 08.05.08 14:45
Разработчик сказал что в качестве Options мы можем передать Handle своего приложения.
-----
Опять все вывернулось наизнанку!!!
Чуток выше говорилось, что необходимо "дергать" медоды ДДЛки.
Теперь же - передать свой хендле в ДЛЛку. Это поможет только в одном - ОнСтарт() может использовать этот хендле чтобы передать обратно свой хендле. Сделай в своем приложении метод, который в состоянии обработать прием чужего хендла и вызывай его из ОнСтарт(). Об том, как это сделать Я постил линки выше.
Вообще-то, получается слишком запутано. Стоит изложить не проблему в которую ты уперся, а задачу которую пытаешься решить - вполне возможно существует относительно простое решение...
По Сишному коду - надо смотреть опреление gg_class_t - возможно, что это "кляуза" (т.е. уже готовый указатель на метод объекта) и не надо маяться с тем что и как вызывать... хотя - маловероятно. Тем более - не описано откуда он берется.
Да, кстати, описание в комментариях не соответствует заголовку функции. Для Сей это не проблема, но для плюсов это уже другой метод.
#22 
HMr завсегдатай08.05.08 20:26
HMr
NEW 08.05.08 20:26 
в ответ Murr 08.05.08 17:38, Последний раз изменено 08.05.08 20:43 (HMr)
В ответ на:
Опять все вывернулось наизнанку!!!

Так я сказал же, что шеф наконец то перестал маяться х...ней, играть в испорченный телефон и решил связать меня с разрабочиком ╚Другого приложения ДП╩ напрямую. Ну и все стало в этом отношении ясно.
В ответ на:
Теперь же - передать свой хендле в ДЛЛку. Это поможет только в одном - ОнСтарт() может использовать этот хендле чтобы передать обратно свой хендле. Сделай в своем приложении метод, который в состоянии обработать прием чужего хендла и вызывай его из ОнСтарт().

Ну я так и написал в своем предыдущем сообщении (возможно не совсем внятно)
В ответ на:
Об том, как это сделать Я постил линки выше.

Ну а чисто по человечески хотябы пару строчек сишного кода или конкретно где все это в твоем линке (название например). Просто все смешалось, хорошо забытое старое новое итд... а тут еще вообще поговорить не с кем в общаюсь только на форуме. А... да что говорить...
PS
В ответ на:
По Сишному коду - надо смотреть опреление gg_class_t - возможно, что это "кляуза" (т.е. уже готовый указатель на метод объекта) и не надо маяться с тем что и как вызывать... хотя - маловероятно. Тем более - не описано откуда он берется.

есть это описание - это структура содержащая в том числе и указатели на методы "ДП"
Я понимаю что в нашем приложении нужно сделать что то типа
public class A
{
public IntPtr drugoePrilozhenieH;
}
А , в OnStart нужно делать как то так
void OnStart (gg_class_t* functions, LPCTSTR Options, LPCTSTR System)
{

HINSTANCE myAppH = Options;
}
Ну а дальше как??? Пожалуйста подскажите. Как в OnStart инициализировать мою переменную drugoePrilozhenieH
Зараннее благодарен
С уважением
HMr
#23 
Murr коренной житель09.05.08 00:06
Murr
NEW 09.05.08 00:06 
в ответ HMr 08.05.08 20:26
Ну и все стало в этом отношении ясно.
-----
Настолько, что поменялось направление передачи данных?
Я, например, уже перестал понимать что, откуда и куда должно пасоваться.
Ну а чисто по человечески хотябы пару строчек сишного кода
-----
Сишного - не попалось, дал - паскалевский - последний из трех линков. В сишном - все тоже самое.
Дополнительно. В сишном виде, но урезанное дано тут:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1621400&SiteID=1
Поискать можно по МСДНу
"Inter Process Communication" SendMessage
или только по применению SendMessage(). Плюс - смотри внизу.
есть это описание
-----
Угу... кто посмотрел - выскажется подробнее. :)
public IntPtr drugoePrilozhenieH;
-----
Есть, по крайней мере мне встречался, вполне определенный тип для хранения хендлов - HINSTANCE. Незачем придумывать еще одну сущность.
HINSTANCE myAppH = Options;
-----
Ну вот и HINSTANCE. Правда передаваемый параметр имеет тип LPCTSTR - указатель на строку и это отнюдь не хендле вызывающего приложения. Как конвертнуть - зависит от того как ты его закодишь для передачи и как его покорежит при передаче. В любом случае - этот параметор не сам хендле.
Как в OnStart инициализировать мою переменную
-----
Думаю, что проще всего - через SendMessage() и доработку оконной процедуры в основном приложении для ловли этого мессаджа.
Попутно - как ты собираешься выяснять хендле загруженной библиотеки? :) Насколько Я помню, его можно поймать только при загрузке... которую у тебя выполняет чужое (закрытое) приложение... Позднее будет получаться хендле всего приложения, а не либы...
#24 
HMr завсегдатай09.05.08 00:23
HMr
NEW 09.05.08 00:23 
в ответ Murr 09.05.08 00:06
В ответ на:
public IntPtr drugoePrilozhenieH;
-----
Есть, по крайней мере мне встречался, вполне определенный тип для хранения хендлов - HINSTANCE. Незачем придумывать еще одну сущность.

Это пример нашего C#ного кода
В ответ на:
Ну вот и HINSTANCE.
В ответ на:
или только по применению SendMessage().

Так повспоминал старое, МСДН почитал пока ждал ответа твоего (не сочти за наглость я без всяких претензий на то что долго или не долго ждал - просто объясняю чем в этот промежуток времени занимался) Ну и твой ответ подтверждает что иду в нужном направлении или близком к нему
Спасибо еще раз за помощь
Хотя тему пока что не закрываю
#25 
Murr коренной житель09.05.08 01:31
Murr
NEW 09.05.08 01:31 
в ответ HMr 09.05.08 00:23
просто объясняю чем в этот промежуток времени занимался
-----
Прописывание двидюков, ужин, отдых, вечерний полив бэкярда...
Все одно между 18 и 22 часами на загрузку страницы уйдет минут пять... так что пусть Ослик понагружает сетку в это время...
#26 
HMr завсегдатай10.05.08 01:19
HMr
NEW 10.05.08 01:19 
в ответ Murr 09.05.08 01:31
Привет всем еще раз!
Как говорил ранее v тему не закрыл еще.
Попытался провести тест вот такой
Сделал приложение на С++ которое вызываю из нашего приложения .NET и привызове передаю ему Handle короче вот наше
private void button3_Click(object sender, EventArgs e)
{
Process.Start(@"C:\CA123A.exe", " " + this.Handle.ToString());

}
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 123)
{
bool b = true;
}
}
А вот на C++
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// MFC initialisieren und drucken. Bei Fehlschlag Fehlermeldung aufrufen.
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: Den Fehlercode an Ihre Anforderungen anpassen.
_tprintf(_T("Schwerwiegender Fehler bei der MFC-Initialisierung\n"));
nRetCode = 1;
}
else
{
//Пытаюсь послать сообщение нашему приложению
HWND hw = (HWND)(argv[1]);
SendMessageW(hw, 123, 1567,1);
}
return nRetCode;
}
Но вот почемуто в WndProc в нашем приложении этот Message не обрабатывается
В чем проблема????
Зараннее благодарен за помощь
С уважением HMr
#27 
Murr коренной житель10.05.08 02:38
Murr
NEW 10.05.08 02:38 
в ответ HMr 10.05.08 01:19
В чем проблема????
-----
Я тебе уже это описал... и весьма подробно.
Смотри с места - Ну вот и HINST...
Hint - распечатай хендле - отсылаемый и полученный.
#28 
NightWatch коренной житель10.05.08 12:49
NightWatch
NEW 10.05.08 12:49 
в ответ HMr 10.05.08 01:19
В ответ на:
Но вот почемуто в WndProc в нашем приложении этот Message не обрабатывается

В ответ на:
HWND hw = (HWND)(argv[1]);
Ты приводишь указатель на строку к HWND. А хэндл содержится в самой строке.
Нужна конвертация, типа этого.
HWND hw = (HWND)_tstoi(argv[1]);
#29 
1 2 все