Вход на сайт
Как вызвать метод процесса в C#?
1314 просмотров
Перейти к просмотру всей ветки
в ответ Murr 08.05.08 00:12
Ну вот разговаривал напрямую с разработчиком ╚Другого приложения╩ (Наконец то шеф понял что играть в испорченный телефон нет никакого смысла)
Да у меня действительно проблема с тем чтобы доходчиво задать вопрос. Но все же попробую v надо ведь добить до конца эту тему.
Итак, снова к нашим баранам:
Имеем
Наше приложение ╚НП╩
Другое приложение ╚ДП╩ (Чужое, написанное не на .NET)
Длл для ╚ДП╩ (Исходники которой предоставил нам разработчик ╚ДП╩ и которую мы сами можем компилировать исправив чего нибудь в исходниках)
Из консоли или например припомощи Process.Start(-) Мы можем запустить ╚ДП╩ просто как ДП.exe или же с некоторыми параметрами например:
ДП.exe -dll=C:\ДЛЛдляДП.dll в этом случае будет запущено ДП с дополнительной ДЛЛ
Или
ДП.exe -dd= HandleНП -dll=C:\ДЛЛдляДП.dll в этом случае будет запущено ДП с дополнительной ДЛЛ и в метод OnStart который имеется в ДЛЛдляДП.dll будет предано Handle нашего приложения.
Дальше у меня появляются вопросы (возможно глупые но я не вижу в этом ничего постыдного прошу только сильно не кидать камни и не плевать в моу сторону (можно но не сильно))
Как передать Handle нашего приложения я знаю, а вот дальше темный лес
Я догадываюсь что в нашем приложении нужно определить какую либо переменную типа object. Потом когда Handle нашего приложения будет внутри метода OnStart инициализировать эту переменную значением чего либо из ДЛЛ и потом уже в нашем приложении при помощи рефлексии работать с объектами из ДЛЛдляДП.
Но как это сделать в C ?
Ниже я привожу текст метода OnStart из примера исходника который предоставил разработчик ДП
//------------------------------------------------------------------------------
// wird unmittelbar nach dem Laden der 'DLL' aufgerufen
// Parameter:
// gg_class_t: (GGFunctions.h) die von GEOgraf bereitgestellte Funtionalität
// Options: der String aus der Startoption -db
//
// Beispiel:
// "c:\program files\gg\bin\ggwin.exe" -db="test1 test2" -dll="c:\program files\test\test.dll"
// Falls die Funktion 'OnStart' in der dll 'test.dll' existiert, wird sie
// wie folgt aufgerufen:
// OnStart (ggfuncs, "test1 test2");
//------------------------------------------------------------------------------
void OnStart (gg_class_t* functions, LPCTSTR Options, LPCTSTR System)
{
}
Разработчик сказал что в качестве Options мы можем передать Handle своего приложения.
Если я написал чтото очень запутанно еще раз прошу сильно не посылать.
Зараннее благодарен за помощь.
С уважением
HMr
Да у меня действительно проблема с тем чтобы доходчиво задать вопрос. Но все же попробую v надо ведь добить до конца эту тему.
Итак, снова к нашим баранам:
Имеем
Наше приложение ╚НП╩
Другое приложение ╚ДП╩ (Чужое, написанное не на .NET)
Длл для ╚ДП╩ (Исходники которой предоставил нам разработчик ╚ДП╩ и которую мы сами можем компилировать исправив чего нибудь в исходниках)
Из консоли или например припомощи Process.Start(-) Мы можем запустить ╚ДП╩ просто как ДП.exe или же с некоторыми параметрами например:
ДП.exe -dll=C:\ДЛЛдляДП.dll в этом случае будет запущено ДП с дополнительной ДЛЛ
Или
ДП.exe -dd= HandleНП -dll=C:\ДЛЛдляДП.dll в этом случае будет запущено ДП с дополнительной ДЛЛ и в метод OnStart который имеется в ДЛЛдляДП.dll будет предано Handle нашего приложения.
Дальше у меня появляются вопросы (возможно глупые но я не вижу в этом ничего постыдного прошу только сильно не кидать камни и не плевать в моу сторону (можно но не сильно))
Как передать Handle нашего приложения я знаю, а вот дальше темный лес
Я догадываюсь что в нашем приложении нужно определить какую либо переменную типа object. Потом когда Handle нашего приложения будет внутри метода OnStart инициализировать эту переменную значением чего либо из ДЛЛ и потом уже в нашем приложении при помощи рефлексии работать с объектами из ДЛЛдляДП.
Но как это сделать в C ?
Ниже я привожу текст метода OnStart из примера исходника который предоставил разработчик ДП
//------------------------------------------------------------------------------
// wird unmittelbar nach dem Laden der 'DLL' aufgerufen
// Parameter:
// gg_class_t: (GGFunctions.h) die von GEOgraf bereitgestellte Funtionalität
// Options: der String aus der Startoption -db
//
// Beispiel:
// "c:\program files\gg\bin\ggwin.exe" -db="test1 test2" -dll="c:\program files\test\test.dll"
// Falls die Funktion 'OnStart' in der dll 'test.dll' existiert, wird sie
// wie folgt aufgerufen:
// OnStart (ggfuncs, "test1 test2");
//------------------------------------------------------------------------------
void OnStart (gg_class_t* functions, LPCTSTR Options, LPCTSTR System)
{
}
Разработчик сказал что в качестве Options мы можем передать Handle своего приложения.
Если я написал чтото очень запутанно еще раз прошу сильно не посылать.
Зараннее благодарен за помощь.
С уважением
HMr