Работа с dll

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Работа с dll

Сообщение Proxy » 31.08.2007 (Пт) 4:56

Может такая тема где-то уже и была рассмотрена, однако в поиске не отображается. Если я создал две программы, которые работают с одними событиями и функциями, нельзя ли создать две маленькие программки + динамическая библиотека с общими функциями?
Если да, то как это сделать?
(Я совершенно новичёк в VB. Изучаю по принуждению)
Follow the white rabbit.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 31.08.2007 (Пт) 9:45

Новый проект, ActiveX DLL
Изображение

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.08.2007 (Пт) 9:47

Proxy
Если бы дали ответ в http://bbs.vbstreets.ru/viewtopic.php?t=34108, то, скорее всего, лёгкий способ создать DLL бы появился.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Сообщение Proxy » 02.09.2007 (Вс) 8:04

Спасибо за ответ.
А как полученную dll применить в новом проекте?
В самой dll разместил код:
Public function test()
test = "Йа тут!!!"
end function
Dll поместил в system32
Обратился к ней также как и к api функциям:
Public Declare Function test Lib "Project1" () As String
При любой попытке обращения пишет, что в указаной библиотеке отсутствует функция test

Что я сделал не так?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.09.2007 (Вс) 8:42

Потому что функция там таки действительно отсутсвует. Нет - на самом деле функция там есть, а вот запись, говорящая об этом, а также о том, где находится там эта функция - она то отсутсвует.

Мой нехитрый способ добавляет в библу это запись. Но добавить запись - мало. Так что там производятся ещё некоторые действия :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 02.09.2007 (Вс) 11:11

Угу.. Вот только пока с твоим нехитрым способом, насколько я понял, что-то не так.. Но мы все надеемся на лучшее, ибо реально полезная штука ведь будет!!!
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.09.2007 (Вс) 11:14

Кстати, автор может обратить свой взор на GSerg-Тёмыч-Даниэль-ла-нигро-вский NativeDLL.

Там правда без:
Так что там производятся ещё некоторые действия
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Сообщение Proxy » 02.09.2007 (Вс) 15:23

Хакер, а в чём заключается этот самый способ?
Я не могу найти, тыкните в меня линком плз.

Есть какие-либо документированные microsoft`ом способы?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.09.2007 (Вс) 15:26

Хакер, а в чём заключается этот самый способ?

В создании таблицы экспорта и кода, инициализирующего рантайм.

Я не могу найти, тыкните в меня линком плз.

Сложно что-то найти, особенно когда не знаешь, что ищешь.

Есть какие-либо документированные microsoft`ом способы?

Нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.09.2007 (Вс) 15:31

Хакер писал(а):и кода, инициализирующего рантайм.

Вот этого там как раз нет.
Пример чисто академического интереса. Использовать его в проектах нельзя.

Автора надо отправить в поиск по его же собственному вопросу ("как использовать activex dll"), а не что-то другое.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.09.2007 (Вс) 15:35

Вот этого там как раз нет.

Тамнет. А я не про там. Я про здесь.

Автора надо отправить в поиск по его же собственному вопросу ("как использовать activex dll"), а не что-то другое.

Автор ничего (по крайней мере - в данном топике) не говорил об activex dll.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.09.2007 (Вс) 15:47

Хакер писал(а):Я про здесь.

Непонятно, как "здесь" относится к теме топика.

Хакер писал(а):Автор ничего (по крайней мере - в данном топике) не говорил об activex dll.

Прочитай сначала http://bbs.vbstreets.ru/viewtopic.php?p=6673008#6673008, потом http://bbs.vbstreets.ru/viewtopic.php?p=6673202#6673202.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.09.2007 (Вс) 15:52

Непонятно, как "здесь" относится к теме топика.

Объясню: я сделал свой NativeDLLCreator. Только он не работает. Но не работает не потому что сама идея кривая, а потому что я допускаю какую-то ошибку при сохранении PE-файла. И у меня есть эта инициализация рантайма.

Если с появлением свободного времени я разберусь с этим - я обязательно запощу свою поделку в проекты.


Прочитал.

И что? Автор спрашивает о нормальных DLL. Ему навязывают использование ActiveX DLL. И?
Хакер писал(а):Автор ничего (по крайней мере - в данном топике) не говорил об activex dll.

Как было правдой, так ею и остаётся.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Сообщение Proxy » 02.09.2007 (Вс) 16:00

Ладно, мне было проще создать dll`ку в C#, я это сделал.
А как теперь заставить это чудо контактировать с vb6?

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Сообщение Proxy » 02.09.2007 (Вс) 16:03

О, тупо работаем с этим как с api функцией, и всё действует 8)
Но вопрос с VB6 vs DLL остаётся открытым.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.09.2007 (Вс) 16:05

Хакер писал(а):Объясню: я сделал свой NativeDLLCreator. Только он не работает.

А.
Опять вариации на тему "дал бы работу, но сам сделаю"...
Если солюшена нет (а его нет, пока ты его не починишь (если починишь)), то говорить о нём в таком сослагательном наклонении неполезно. А тот я вот тоже написал программу, которая сама программы на заказ пишет. Только она пока не работает. Но мне можно теперь в каждом топике на любой вопрос отвечать "вот если бы она работала, ..."?

Хакер писал(а):Прочитал.

И что? Автор спрашивает о нормальных DLL. Ему навязывают использование ActiveX DLL. И?

Автор спрашивает о любых dll как о средстве помещения общей функциональности двух программ в одно место. Ему объясняют, что VB создаёт только ActiveX dll. Автор благодарит в той форме, из которой ясно, что ActiveX dll он уже создал. Перетягивать одеяло на native dll только затем, чтобы упомянуть о своей неработающей на данный момент методе, также неполезно. Если очень хочется быть that useful, дай ссылку на статью о работе с ActiveX dll.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Сообщение Proxy » 02.09.2007 (Вс) 16:20

А под linux вообще не запускается. Типо "сделало недопустимое,выполнило невыполнимое и вообще зря родилось". А по заказу должно работать именно под linux. :cry:
Dll`ку как вообще корректно перенести из форточек?
А до применения Public Declare`a очень даже исправно запускалось после компиляции по NO Optimization. Где трабля зарыта?
Может зря я вообще vb выбрал?

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Сообщение Proxy » 02.09.2007 (Вс) 16:24

GSerg, а ведь я и не получил внятного ответа на вопрос создания dll под vb. Зря на Хакер`а флеймы отпускаешь, хороший человек, видимо.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.09.2007 (Вс) 16:24

А.
Опять вариации на тему "дал бы работу, но сам сделаю"...

Не понял.

Если солюшена нет (а его нет, пока ты его не починишь (если починишь)), то говорить о нём в таком сослагательном наклонении неполезно.

А я не говорил вплоть до того момента, пока не пришлось это сделать, дабы объяснить, что скрывается под словом "здесь".

А тот я вот тоже написал программу, которая сама программы на заказ пишет. Только она пока не работает. Но мне можно теперь в каждом топике на любой вопрос отвечать "вот если бы она работала, ..."?

Следует понимать разницу, между "не работает, потому что неправильно реализовал", и "не работает, потому что где-то нарушена спецификация".

Автор спрашивает о любых dll как о средстве помещения общей функциональности двух программ в одно место. Ему объясняют, что VB создаёт только ActiveX dll.

VB создаёт DLL - и этого достаточно. ActiveX-библиотеки являются подмножеством Native-библиотек.

Перетягивать одеяло на native dll только затем, чтобы упомянуть о своей неработающей на данный момент методе, также неполезно.

Хранить функции в классах - как ты говоришь - неполезно.
Одеяло перетегиваю на native dll вовсе не затем, чтобы о чём-то там упомянуть, а потому что автор хочет функции, которые потом можно declare и call. А так можно поступать лишь с обычными экспортируемыми функциями, но никак не с методами классов ActiveX DLL. Которую к тому же надо ещё и регистрировать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Сообщение Proxy » 02.09.2007 (Вс) 16:26

>>>Которую к тому же надо ещё и регистрировать.

А как???

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.09.2007 (Вс) 16:28

regsvr32 "путь_к_активикс_длл_библиотеке"

Не под всяким аккаунтом получится.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 02.09.2007 (Вс) 16:39

Угу.. Админские права.. Да и с работой под линукс есть некоторые.. Хм.. Сомнения..
А с чего ты вообще для линукса ВБ выбрал, и каким местом ты это там запускаешь??? wine?
label:
cli
jmp label

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.09.2007 (Вс) 17:52

Proxy писал(а):А под linux вообще не запускается. Типо "сделало недопустимое,выполнило невыполнимое и вообще зря родилось". А по заказу должно работать именно под linux. :cry:

Это на баш, по всей видимости.

Proxy писал(а):Dll`ку как вообще корректно перенести из форточек?

Никак.
Тем более написанную на C#.
Тем более, что C#не создаёт native dll.

Proxy писал(а):Может зря я вообще vb выбрал?

Очевидно так.

Proxy писал(а):GSerg, а ведь я и не получил внятного ответа на вопрос создания dll под vb.

Ты его получил, и не один раз. Если ты его не прочитал, не понял или не захотел понять, это другое дело. И ещё один раз могу сказать, для поклонников бронепоездов: VB не создаёт native dll, VB создаёт ActiveX dll. Как их создавать, тебе уже сказали.

Proxy писал(а):Зря на Хакер`а флеймы отпускаешь, хороший человек, видимо.

Ты, несомненно, точно знаешь, что тебе нужно, и хорошо разбираешься в предмете (об этом ярко говорит использование C# для написания dll и использование .net и VB6 под линукс). И конечно, любое направление тебя в сторону того тупика, в который ты упорно стремишься, тобой воспринимается как долгожданная помощь. А любой пинок в обратном направлении, разумеется, наоборот.


Хакер писал(а):Одеяло перетегиваю на native dll вовсе не затем, чтобы о чём-то там упомянуть, а потому что автор хочет функции, которые потом можно declare и call. А так можно поступать лишь с обычными экспортируемыми функциями, но никак не с методами классов ActiveX DLL

Угу.
Теперь вернись к начальному посту топика, узри там "с одними событиями и функциями" и напиши примерчик с событиями в native dll. То, что надо deсlare, придумал ты сам. Или, не захотев подумать, повторил за автором, который использовал declare в третьем посте, потому что ничего другого просто не знает.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Работа с dll

Сообщение iGrok » 02.09.2007 (Вс) 18:14

Proxy писал(а): + динамическая библиотека с общими функциями?
GSerg, извини, но ты не совсем прав...
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.09.2007 (Вс) 18:44

Теперь вернись к начальному посту топика, узри там "с одними событиями и функциями" и напиши примерчик с событиями в native dll.


События легко организовываются с помощью callback-ов. И это даже лучше, чем те события, о которых ты говоришь, потому что обработчик можно поместить в модуле.

То, что надо deсlare, придумал ты сам.

То что надо declare написал автор в третьем посте.

Он поставил вопрос - почему появляется ошибка при использовани Declare.
Я дал на него точный и верный ответ - потому что в таблице экспорта об этой функции ничего не говорится.

Ты же (и некоторые другие) почему то пытаетесь втемяшить автору идею использования ActiveX DLL. Причём, не только идею использования, но и убеждение в том что это самый верный идеологически путь.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Работа с dll

Сообщение GSerg » 02.09.2007 (Вс) 19:33

iGrok писал(а):
Proxy писал(а): + динамическая библиотека с общими функциями?
GSerg, извини, но ты не совсем прав...

Из процитированного этого не следует. Потому что "динамическая библиотека" -- это как раз dll. В том числе activex.

Хакер писал(а):Он поставил вопрос - почему появляется ошибка при использовани Declare.
Я дал на него точный и верный ответ - потому что в таблице экспорта об этой функции ничего не говорится.

Угу. Точный и верный. Ровно как в анекдоте. "-- Это был математик, Ватсон! -- Почему? -- Потому что его ответ был абсолютно точен и абсолютно бесполезен!"

Хакер писал(а):Ты же (и некоторые другие) почему то пытаетесь втемяшить автору идею использования ActiveX DLL.

Потому что именно таким образом создают dll в рамках того инструмента, который автор почему-то выбрал. Создавать native dll на VB6 криво, и от того, что это технически возможно через задницу, менее кривым оно не становится.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.09.2007 (Вс) 20:20

GSerg писал(а):
Proxy писал(а):А под linux вообще не запускается. Типо "сделало недопустимое,выполнило невыполнимое и вообще зря родилось". А по заказу должно работать именно под linux. :cry:

Это на баш, по всей видимости.

Наоборот, это оттуда.


Автору: ActiveX DLL подключаются через Project -> References.
Чтобы функции, заключённые внутрь ActiveX DLL, можно было вызывать как обычные функции, содержащему их классу нужно выставить свойство Instancing в значение 6 - GlobalMultiUse.
Изображение

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 02.09.2007 (Вс) 22:40

Кстати, некоторые программы VB6 у меня получилось заставить работать в линуксе под wine. Но сделано это больше от безысходности, т.к. программировать под линукс я еще не научился (практически нет свободного времени).

Автору: если нужно писать программу под линукс лучше использовать язык, который для этого наиболее приспособлен, напр. Python, JAVA и др.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 02.09.2007 (Вс) 23:36

напр. Python, JAVA и др.


идр это си. си и только он. можно и питон, но лучше си.

да, насчет длл, тёмыч прав - автор берет класс, добавляет в него функции, выставляет глобальный мультик юзе, и компилирует.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 03.09.2007 (Пн) 0:08

Денис, ты сам умеешь на С писать гуёвые приложения под линукс, или так сказал лишь бы ляпнуть?
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 7

    TopList  
cron