Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: путь поиска DLL Добавлено: 11.02.05 09:29  

Автор вопроса:  AlexT
Есть маленькая проблемка:
в runtime необходимо загрузить DLL, имя которой известно, а путь хранится в ячейке книги. Как это сделать? Если я в Declare указываю только имя - Dll не находится, даже если перед вызовом ее функций я к переменной окружения PATH добавляю ее путь...
Может где-то раньше обновлять PATH?...

ПС. Я тут посмотрел пример явного вызова dll на VB - уж слишком громоздко для маленькой задачки! и в добавок - у меня параметры процедуры разнотипные и есть строковые :(

Ответить

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

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



Вопросов: 117
Ответов: 1538
 Профиль | | #1 Добавлено: 11.02.05 09:55
А что мешает указать полное имя (вместе с путём) в Declare?

Ответить

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



Вопросов: 1
Ответов: 4
 Профиль | | #2 Добавлено: 11.02.05 10:20
дык я вроде бы написал... путь хранится в ячейке книги (то бишь он может быть изменен) - чтобы конечному пользователю не в исходном коде менять путь, а в ячейке на странице настройки ;)

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 11.02.05 11:07
LoadLibrary

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #4
Добавлено: 11.02.05 11:07
 Если громоздко не нравится, то проверяй DIR$ и если её нет по APP.PATH, то копируй её туда.
Типа так:

[/code]
Declare Function MyProc Lib"MyLib" ...

If Len(Dir$(App.Path & "\MyLib.DLL))=0 Then
   FileCopy ПутьВЯчейке, App.Path
End If
[code]
 Только не нужно проверять каждый раз. Один раз проверь при запуске макроса.

PS: Я это не тестировал.

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 11.02.05 11:09
О, первый раз направильно теги написал :)

Declare Function MyProc Lib"MyLib" ...

If Len(Dir$(App.Path & "\MyLib.DLL))=0 Then
   FileCopy ПутьВЯчейке, App.Path
End If

Ответить

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



Вопросов: 117
Ответов: 1538
 Профиль | | #6 Добавлено: 11.02.05 11:10
Дык не написал как раз, что путь может меняться.
Используй в таком случае LoadLibrary/GetProcAddress

Ответить

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



Вопросов: 1
Ответов: 4
 Профиль | | #7 Добавлено: 11.02.05 12:27
если я в Declare указываю только имя - Dll не находится, даже если перед вызовом ее функций я к переменной окружения PATH добавляю ее путь...
только я это делал с помощью GetEnvironmentVariable и SetEnvironmentVariable

Ответить

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



Вопросов: 1
Ответов: 4
 Профиль | | #8 Добавлено: 11.02.05 14:06
что-то у меня Dll по имени не находится, даже если она лежит в \System32. работает только с полным путем...

Ответить

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



Вопросов: 117
Ответов: 1538
 Профиль | | #9 Добавлено: 11.02.05 14:31
Хе, так может с этого и надо было начинать :)))

А вообще-то неплохо было бы посмотреть, как объявляешь (Declare), как получаешь путь, в общем код. Если конечно это не государственноая тайна.

Ответить

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



Вопросов: 1
Ответов: 4
 Профиль | | #10 Добавлено: 11.02.05 14:52
короче, с багом разобрался - в Винде была тандартная dll с таким же именем (полдня потерял...). Переименовал - и все заработало! С вариантом добавления нужного пути к переменной окружения PATH
Если нужна процедура проверки и добавления - предоставлю

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #11
Добавлено: 11.02.05 17:08
Если оно на время то можно временно скопировать в каталог Windows || System || System32 || в AppPath.

Можешь еще посмотреть CallApiByName(Ex)... Пусть немножко "громоздко" но да думаю что др. вариантов не так и много...

Ответить

Страница: 1 |

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



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