Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Вопросы по написанию DLL Добавлено: 06.08.05 22:33  

Автор вопроса:  HACKER
Всем хело!
вопросы...

1) Вот создал я в классмодуле функцию, у ней есть входные параметры, скомпилировал dll, как мне приципить свою dll к другой проге, как запустить нужную мне функцию и передать её параметры.

2) Нужно ли регестрировать в реестре DLL ? Или достаточно её выбрать/прописать ?

3) Могут ли потом мою DLL использовать в других языках программрования?

Заранее спасибо.

Ответить

  Ответы Всего ответов: 19  

Номер ответа: 1
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #1
Добавлено: 06.08.05 23:49

3 вопроса - 3 на уровне едтского сада. Не обижайся, но они ведь глупые...

1) Вот создал я в классмодуле функцию, у ней есть входные параметры, скомпилировал dll, как мне приципить свою dll к другой проге


Стоп, куда прицепить? Внедрить или использовать в своём ВБ прилоджении?

2) Нужно ли регестрировать в реестре DLL ? Или достаточно её выбрать/прописать ?


Регистрировать? Конечно нужно, это ведь ActiveX компонент. Прописать? Хм, а ты знаешь что такое регистрация? Это и есть прописывание в реестр ГУИДА, модели сервера и пути к DLL/OCX, т. е. прописать можно, но толку то.....

её выбрать

Без коментариев....
Выбрать
это что такое?

3) Могут ли потом мою DLL использовать в других языках программрования?


Что такое DLL на ВБ?Это COM сервер в исполнении DLL. А COM он был, есть и будет. И все языки, что поддерживают COM, способны работать с твоей ДЛЛ.

П. С. Подучись теоретически. В жизни любого программиста настает период, когда нужно закинуть практику и открыть книгу.

Ответить

Номер ответа: 2
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 07.08.05 08:48
1. Скорее всего так:
 Inst1=CreateObject("PrjName.ClassName";)
 Вызов: Inst1.Method1([param]), Result=Inst1.Propery1

2. regsvr32 mydll.dll

3. см. 1

Ответить

Номер ответа: 3
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #3
Добавлено: 07.08.05 12:16
1.

2CyRax: CreateObject не очень хороший вид связывания. Лучше в Project->References выбери нужную DLL и Создавай класс :
Dim Something as New YOURDLLCLASS


2. Я бы предпочел регистрировать самостоятельно, без третьих лиц :). Просто вызви функцию саморегистрации, которая есть во всех ActiveX'ах:

  
   hInst = LoadLibrary("C:\yourdll.dll";)
   hFunc = GetProcAddress(hInst, ";DllRegisterServer";)
   CallWindowProc hFunc, 0, 0, 0, 0
   FreeLibrary hInst

Ответить

Номер ответа: 4
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #4
Добавлено: 07.08.05 12:22

А сам CreateObject больше подходит для скриптовых языков потому, что используя этот вид связывания (позднего связывания) невозможно реализовать IDispatch интерфейс и, следственно у тебя не будет событий. Ты сможешь вызывать функции из DLL, но сама DLL не сможет передавать проге евенты типа Command1_Click(). Да и ещё против позднего вида связывания выступает то, что он самый медленный. Но достоинство этого вида лежит в том, что твоя прога не вылетит с ошибкой, если данная ДЛЛ не найдена, ты всегда сможешь контролировать загрузки ДЛЛ.Не удалась CreateObject - забили и поехали дальше без длл, типа того :)

Ответить

Номер ответа: 5
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #5 Добавлено: 07.08.05 15:34
Глупых вопросов небывает. Я не имел ввиду внедрить, просто использовать мою длл в других (моих же)программах. Прописать я имел ввиду в программе, а не в реестре, с реестром я и сам разберусь. Я добавляю к своей проге DLL через Project->References, но далле тёмный лес... Помойму исходя из других примеров нужно в декларациях её объявить, что-то типа

Private Declare Sub SaveToJpg1 Lib "c:\savtojpg.dll" (ByVal hgd As Long, ByVal FileName As String, _
ByVal Height As Long, ByVal Width As Long)

Есть так, то с параметрами всё ясно, но здесь указан конкретный путь к этой DLL, поэтому я и спрашивал, обязательно ли её нужно через Project->References выбирать. С реестром вопрос снять, будем регестрировать

2 CyRax Мало чё понял, может есть какая нибуть статья, ли др. инфа, или может на примере покажешь?

Ответить

Номер ответа: 6
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #6 Добавлено: 07.08.05 15:35
используя этот вид связывания (позднего связывания) невозможно реализовать IDispatch интерфейс

DaSharm, ты не поверишь, но позднее связывание целиком основано на IDispatch и невозможно без него.
Кроме того, иногда это единственный выход. Например, если хочешь, чтобы прога работала с любой версией Office, придётся использовать позднее.

Ответить

Номер ответа: 7
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #7 Добавлено: 07.08.05 15:38
просто использовать мою длл в других (моих же)программах

Подключить через references.
Не использовать declare.
Забыть про фактическое местоположение ввиду его неважности.

Потом создавать экземпляры классов библиотеки и вызывать их методы.

Ответить

Номер ответа: 8
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #8
Добавлено: 07.08.05 17:12
2GSerg: да, я ошибся, просто не то ,Что надо в голову влезло. В действительности динамическое связывание использует IDispatch, и очень активно, от этого и тормоза.

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

Ответить

Номер ответа: 9
Автор ответа:
 Barsik



Разработчик Offline Client

ICQ: 343368641 

Вопросов: 17
Ответов: 686
 Web-сайт: barsik.newmail.ru
 Профиль | | #9
Добавлено: 07.08.05 17:44
а не проще ли писать библиотеки на PB?

Ответить

Номер ответа: 10
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 07.08.05 23:19
2 Barsik
В моём случае не проше

2 ALL
Чуваки, мне конечно очень интерестно читать про всякие IDispatch в ваших постах итп итд... Если не сложно, привидите пример какой нибуть dll из одной функции/подпрограммы, и из другого примера вызовите ту подпрограмму передав ей параметры, всё! это всё что мне нужно. Это я конечно наглею, но тогда дайте чё нибуть почитать на русском по этому поводу, разобраться то надо.

Ответить

Номер ответа: 11
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #11 Добавлено: 08.08.05 04:14
После MSDN читать про то же на русском не хочется.

Библиотека содержит класс, допустим, Global.
В дизайнере этому классу присвоить Instancing: Global multi use.
Воткнуть в класс
public function add(byval i1 as long, byval i2 as long) as long
  add=i1+i2
end function


Скомпилировать.
Подключить к новому проекту.
В новом проекте набрать
msgbox add(1,2)



Чё не понятно-то?

Ответить

Номер ответа: 12
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #12 Добавлено: 08.08.05 10:36

А сам CreateObject больше подходит для скриптовых языков потому, что используя этот вид связывания (позднего связывания) невозможно реализовать IDispatch интерфейс и, следственно у тебя не будет событий.

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

DaSharm, ты не поверишь, но позднее связывание целиком основано на IDispatch и невозможно без него.

Подозреваю что он имел ввиду IUnknown

 Это я конечно наглею, но тогда дайте чё нибуть почитать на русском

Достоевский подойдет? Могу намылить :)
Если серьезно - открой любой пример и посмотри, их и на этом сайте полно. Естественно, параллельно с теорией.
Кстати, насколько я знаю, Global Multi Use - фича конкретно для VB, в других языках аналога нету.
Освой для начала MultiUse и New. Примеров уйма.

Ответить

Номер ответа: 13
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #13
Добавлено: 08.08.05 12:35
HACKER,
 Вообще то это для 1С-ки. Мож в VB и по другому :)

Ответить

Номер ответа: 14
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #14 Добавлено: 08.08.05 12:51
Подозреваю что он имел ввиду IUnknown

Гы, тогда ещё страннее - потому что IUnknown точно есть везде в COM :)

Скорее всего, он имел в виду IConnectionPoint, через который реализуется механизм событий. Впрочем, события можно заиметь и тут, просто всё то, что VB делает сам, придётся делать руками.

Ответить

Номер ответа: 15
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #15 Добавлено: 08.08.05 12:56
2 GSerg

А когда класс уже скомпилирован в DLL подключаю её через Project->References и??? и чё больше ничё :)? тупо вызывать же функцию с dll неполучится, чё то объявить, прописать от это я и спрашиваю

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам