Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

dll! как заставить работать незвестную процедуру или функцию?   Найти похожие ветки 

 
snowkam ©   (2005-11-02 08:26) [0]

Все конешно хорошо. Написание dll  дело очень хорошее. А вот как сделать такую вешь. Скажем существует проект который использует процедуры некой dll-ки. Проект откомпелированный и в нем обьявлены эти процедуры. А если я написал в этой библиотеке новую процедуру. Как мне заставить проект увидеть ее. Можно ли сделать так чтобы скажем сам проект взял dll-ку, взял описание к ней и увидел все функции и процедуры находящиеся в ней!


 
Digitman ©   (2005-11-02 09:06) [1]


> Как мне заставить проект увидеть ее


точно так же как ты заставил свой exe-проект "увидеть" все предыдущие процедуры в твоей dll


 
evvcom ©   (2005-11-02 09:12) [2]


> Можно ли сделать так чтобы скажем сам проект взял dll-ку,
>  взял описание к ней и увидел все функции и процедуры находящиеся
> в ней!

Ну так напиши проект с искусственным интеллектом. :)
Что ты называешь описанием? Чтобы программа "понимала" какие-то процедуры и функции, она либо должна знать, что именно эта функция делает то-то, либо вызывая известные ей функции, получать от них необходимую ей информацию в понимаемом ею виде.


 
wal ©   (2005-11-02 09:39) [3]

AutomationObject + TypeLibrary, но что ты с этим делать будешь в "откомпилированном проекте"?


 
Slym ©   (2005-11-02 10:01) [4]

Ты часто нажимаешь неизвестные тебе кнопки?
А кнопка называется "Запускай меня, я безобидный", или FormatC, "220V KILL"...
Вот ты запустил бы такое? Я нет...
Тоже самое касается и программы.


 
snowkam ©   (2005-11-03 00:14) [5]

ой, ну извените может не так описал все это дело.
Мне нужно вот что. У меня существует проект который запускает некие процедуры. Так вот мне нужно чтобы эти процедуры были написанны отдельно. Скажем у меня написано нечто. Есть Основной проект и написанные к нему консольные  модули. Каждый модуль выдает результат одинакового формата "статус:  числовой результат".  Тоесть основной проект в определенное время запускает нужный модуль получает результат. И этот результат записывает в базу.  Очень удобно. Тоесть любой человек на чем угодно может написать любой консольный модуль который бы выполнял бы свои действия. Тоесть ему не приходится задумываться о том что нужно править основной проект.
Проблема в том что консольные приложения это очень грамозко и не удобно. Очень часто происходят сбои и подвисание всего проекта.  
Чем заминить это звено? Может у кого есть свои наработки. Думал заменить dll  но понял что это не возможно.


 
Zeqfreed ©   (2005-11-03 00:34) [6]

snowkam ©   (03.11.05 0:14) [5]
Опиши как сейчас у тебя это все работает. Я понял примерно так:  основная программа по какому-то критерию выбирает некую консольную программу, запускает её и считывает результат, так? В таком случае заменить консольные приложения dll-ками очень даже реально и даже очень желательно. Хм, и чем не подходят, например текстовые файлы, если формат вывода настолько прост? Или там используются какие-то вычисления с параметрами?

p.s.

> ой, ну извените может не так описал все это дело.

извеняем!


 
snowkam ©   (2005-11-03 01:15) [7]

2Zeqfreed:
>Я понял примерно так:  основная программа по какому-то критерию выбирает некую консольную программу, запускает её и считывает результат, так?

Все совершенно правельно.
А DLL не подходит потому что придется обьявлять процедуру в основном проекте. А я не хотелбы перекомпелировать основной проект.
Хотелось бы так написал модуль положил ее куда надо. Основному проекту в базу данных забил что в определенное время взять оттуда данный модуль, запустить его во столько бы часов с такими параметроми получить результат и результат записать в базу данных.
и все :-(


 
Baltika-39   (2005-11-03 02:11) [8]

>snowkam ©   (03.11.05 00:14) [5]

Вряд ли, начав использовать DLL, ты увеличишь надежность проекта в целом.
Если сейчас ты имеешь зависание приложения, после подключения DLL можешь получить крах приложения.

Ты бы описал точную схему вызовов консольных приложений, обмена данными.

Скорее всего, копать надо продолжать в этом направлении, немного изменив алгоритм.

Из твоего постинга непонятно:

1. Каким образом ты запускаешь консольное приложение.
2. Каким образом получаешь результат.
3. Причина зависания основного приложения.

Если будет информация об этом, можно будет что-то посоветовать.


 
snowkam ©   (2005-11-03 03:11) [9]

2Baltika-39
Да?
А я думал написание процедуры и написание консольного приложения это две разные вещи.
Помоему самое лутшее упразнение в моем варианте это какраз консоль заменить на процедуру!


 
Никто ©   (2005-11-03 04:48) [10]

Написание процедуры и написание dll, содержащей процедуру - вещи все-же немного разные.
Особенно, если учесть, что в Вашем случае "внешние" консольные приложения пишет "кто угодно, на каком угодно языке" - и, следствие - КАК УГОДНО.  А кто будет вписывать новые процедуры в Вашу Dll и перекомпилировать ее?
Если же каждый будет писать свою dll, экспортирующую некую "стандартную" функцию -  т.е. одинаковые название, список параметров, возвращаемый результат - придешь к тому же, что и с "консолями"...но,[b] имхо[/b], в еще худшем варианте.


 
snowkam ©   (2005-11-03 05:13) [11]

блин да что такое! Я спрашеваю чем можно заменить консольное приложение????? Не обязательно DLL


 
Никто ©   (2005-11-03 05:47) [12]

Чем? Да чем угодно... скриптом, dll, оконным приложением, com-сервером...
Всё зависит от задачи :Р
А Вас спрашивают - а НАДО ЛИ заменять?


 
Slym ©   (2005-11-03 09:49) [13]

Никто ©   (03.11.05 4:48) [10]
По какому критерию "худший вариант"?

snowkam ©   (02.11.05 8:26)
Афтар - я тебя перефразирую:
Есть приложение, которое во время работы должно вызывать "внешние" функции и сохранять результат. Налицо некое приложение с "плугинами". сейчас оно реализовано перехватом Std "плугинов-Exe"

Dll придуманы для динамической компоновки и лучшим образом подходят для организации Plugin схемы:

все Plugin экспортируют функцию с определенным именем и установленного (в рамках твоей схемы) формата.

1. приложение сканирует определенный каталог на dll
2. пытается загрузить их и найти нужную функцию
3. вызов функции.
4. выгрузка dll


 
Никто ©   (2005-11-03 11:54) [14]


> Slym ©   (03.11.05 09:49) [13]
> Никто ©   (03.11.05 4:48) [10]
> По какому критерию "худший вариант"?

Автор утверждает, что:
1)Проблема в том что консольные приложения это очень грамозко и не удобно. Очень часто происходят сбои и подвисание всего проекта.  
2)любой человек на чем угодно может написать любой консольный модуль который бы выполнял бы свои действия.
ИМХО, если в этой ситуации "любой человек на чем угодно" будет писать "любую dll" - Это  не избавит от сбоев и подвисаний. Зато может добавить падений.


 
Zeqfreed ©   (2005-11-03 11:54) [15]

snowkam ©   (03.11.05 5:13) [11]
Поддерживаю [13] :)

Опять же уточню, консольные программы сейчас используют какие-либо параметры, получаемые от основного модуля, для вычисления и отображения результат или нет? Если нет, то почему это не могут быть, например, обычные текстовые/бинарные файлы?


 
Никто ©   (2005-11-03 12:05) [16]


> Zeqfreed ©   (03.11.05 11:54) [15]

так использовать-то и правда можно что угодно  (Никто ©   (03.11.05 05:47) [12]) - а что именно, выбирается в зависимости от задачи -)
Но (моё голимое имхо) - в любом случае основное приложение писать надо аккуратнее. Не должны "сбои и зависания" вызываемых консольных приложений (в конкретном случае) так фатально влиять на основное. "Предохраняться надо" (с)


 
vasya pupkin   (2005-11-04 00:34) [17]

из всего прочитанного я понял что автор бьется над тем что ему нужно:

1. модуль выполнял какие либо функции и возвращал результат.
2. модули должны быть независимо написанны но работали как общее целое с проектом.

Автор добился результата при помощи консольных приложений. Но действительно это громозко и не удобно.
Согласен что тебе нужно использовать DLL  но в этом случаи тебе все равно придется перекомпилировать основной проект.
больше я не вижу решения данной проблеммы.



Страницы: 1 вся ветка

Текущий архив: 2005.12.04;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.037 c
4-1128343460
Max_Keks
2005-10-03 16:44
2005.12.04
Клавиша ALT


14-1131914761
Kerk
2005-11-13 23:46
2005.12.04
Вы все еще используете ACDSee? Тогда мы идем к Вам!


1-1131442637
diwww
2005-11-08 12:37
2005.12.04
Форму в нижний равый угол


2-1132038926
Silvestr
2005-11-15 10:15
2005.12.04
Как в RishEdit поменять цвет определёной строки ?


2-1132066253
бедный студент
2005-11-15 17:50
2005.12.04
шаг цикла