dll-exe interaction

Все, что вы хотели знать о программизме, но боялись спросить.
i_van
Завсегдатай
Сообщения: 251
Зарегистрирован: 09 сен 2004, 23:58

Сообщение i_van »

ajkj3em писал(а):
i_van писал(а):
ura писал(а):A.EXE это что, процесс который запущен или подразумевается что он является тоже DLL по сути? Исходники его есть?
Да это процесс. Исходники есть.
тогда все тривиально - добавьте __declspec(dllexport) перед нужной
функцией и дальше ее можно будет найти из других модулей через
LoadModule / GetProcAddress
Теперь depends видит мою функцию (адрес).
Однако смущает, что для поиска исрользуется только имя. A если a_func() - перегружаемая?
Или я вижу только адрес какой-нибудь виртуальной таблицы в которой несколько версий a_func()?
Или же мне надо использовать С-конвенцию: extern "C"?
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Сообщение ura »

Важная часть этого дела это то, что процесс A загружен и работает.
Вызывать функцию из мертвого процесса смысла как я понимаю нет, поскольку ничего не проинициализировано. Процесс A это процесс в себе, каким образом там можно вызвать функцию напрямую из работающего процесса?

Вот факт что он может загрузить DLL и надо использовать как ключевой. Надо писать подходящую DLL и выставлять из нее COM или .NET remoting или там MSMQ интерфейс наружу ну или по простому через сокеты или RPC.
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

ura писал(а):Надо писать подходящую DLL и выставлять из нее COM или .NET remoting или там MSMQ интерфейс наружу ну или по простому через сокеты или RPC.
Наконец-то я вижу пример правильного enterprise подхода к проблеме. А то развели тут всякие depends , __declspec и прочую лабуду...
.NET remoting это SOAP, я так понимаю?
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Сообщение ajkj3em »

Marmot писал(а):
ura писал(а):Надо писать подходящую DLL и выставлять из нее COM или .NET remoting или там MSMQ интерфейс наружу ну или по простому через сокеты или RPC.
Наконец-то я вижу пример правильного enterprise подхода к проблеме.
это пять .. типа сама проблема пока не понятна, но правильный подход к ее решению уже есть :-)
это как у китайцев в моей прошлой конторе -
I don't know what the bug was, but I have already fixed it.
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Сообщение ajkj3em »

ura писал(а):Важная часть этого дела это то, что процесс A загружен и работает.
да не факт. может там функция, которая числа на делители раскладывает за О(n) :-)
ura
Житель
Сообщения: 915
Зарегистрирован: 09 мар 2003, 22:46

Сообщение ura »

Marmot писал(а):
ura писал(а):Надо писать подходящую DLL и выставлять из нее COM или .NET remoting или там MSMQ интерфейс наружу ну или по простому через сокеты или RPC.
Наконец-то я вижу пример правильного enterprise подхода к проблеме. А то развели тут всякие depends , __declspec и прочую лабуду...
.NET remoting это SOAP, я так понимаю?
.NET Remoting это аналог DCOM для для .NET, может работать через TCP сокет или через HTTP. Кстати SOAP тоже не полохая фича, т.е. в терминах .NET это будет Web Services, что позволит выставить фичи этого a.exe наружу как Web Sevices, подход более универсальный поскольку платформно независимый со стороны вызывающего клиента.
Аватара пользователя
Azazello
Житель
Сообщения: 769
Зарегистрирован: 16 янв 2007, 04:31

Сообщение Azazello »

i_van писал(а):Однако смущает, что для поиска исрользуется только имя. A если a_func() - перегружаемая?
Или я вижу только адрес какой-нибудь виртуальной таблицы в которой несколько версий a_func()?
Или же мне надо использовать С-конвенцию: extern "C"?
Если хотите задать экспортируемым функциям свои имена, то используйте EXPORTS в .def файле. __declspec(dllexport) - это самая примитивная форма EXPORTS.
Ответить