|
|
|
| Хочу использовать DLL (DrvMercFR.dll)
Dim MercFRDLL
Set MercFRDLL = CreateObject("AddIn.DrvMercFR")
========================================
А куда класть саму DLL чтобы к ней обращаться таким образом?
Попробовал в референсах - она не подключается там? | |
|
| |
|
20 Кб. |
|
| вот что пишет | |
|
| |
|
|
|
| а regsrv32 делал - ты ее сначала пропиши в винде | |
|
| |
|
|
|
| не регистрируется скотина
И ваще это не ocx а dll
Её использовать как то нужно а не регистрировать. | |
|
| |
|
|
|
|
Попробовал в референсах - она не подключается там?
|
нет | |
|
| |
|
|
|
| http://am.rusimport.ru/MSAccess/topic.aspx?ID=650
посмотри | |
|
| |
|
|
|
| Эту DLL не нужно регистрировать, но она должна лежать либо в папке с ехе-шником программы либо в папке, которая прописана в путях "PATH" виндоус.
Для работы с ней и обращения к функциям нужно знать, как эти функции декларировать в коде программы. Это могут сказать разработчики этой DLL. Возможно, есть примеры использования этой DLL в проектах.
Вот распространенный пример использования DLL с предварительной декларацией.
'Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" (ByVal _
' hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal _
' lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) | |
|
| |
|
|
|
| Спасибо.
Вот чё нарыл.
Только маленькое уточнение - в Вин семерке надо регить ДЛЛ-ки от имени администратора. Т.е. тупо как раньше:
DOSer писал(а):
Пуск-Выполнить:
regsvr32 "C:\Program Files\1cv81\bin\MercFPrt1C.dll"
выдает ошибку типа: "указанный модуль найден, но не удалось осуществить вход"
Надо либо CMD (командная строка) запускать от имени Админа, либо создавать ярлык для RegSvr32 "путь к DLL-ке" и запускать его от имени Администратора.
|
Создал ярлык, но опять не знаю как его запустить от имени администратра.
Я уже такую тему поднимал, но так нмчего и не понял.
Я один единственный пользователь и я с правами типа админа, что то не хватает у меня понятий. | |
|
| |
|
149 Кб. |
|
| Спасибо Коттт
Не помогает
Private Sub Кнопка0_Click()
Declare Function RegTestDLL Lib "DrvMercFR.dll" Alias _
"DllRegisterServer" () As Long
Const ERROR_SUCCESS = 0&
Dim retCode As Long
On Error Resume Next ' включаем программную обработку ошибок
ChDrive "C:" ' Устанавливаем нужный
ChDir "C:\" & CurrentProject.Path ' каталог текущим
regCode = RegTestDLL() ' регистрация Test.DLL
' анализ возможных ошибок
If Err <> 0 Then
MsgBox "Файл Test.DLL не найден"
Else
If regCode <> ERROR_SUCCES Then
MsgBox "Операция регистрации не выполнена"
End If
End If
End Sub
|
пишет | |
|
| |
|
|
|
| хи-хи (злорадно потирая руки и размахивая плакатом "ХР РУЛИТ!!!")
Нажмите кнопку Пуск;
– в текстовое поле Найти программы и файлы введите cmd;
– в появившемся перечне (под заголовком Программы) нажмите правой кнопкой мыши cmd.exe;
– из контекстного меню выберите Запуск от имени администратора;
– введите пароль, если появится соответствующий запрос;
– в открывшемся окне Интерпретатора команд Windows после приглашения системы введите regsvr32 имя_файл, нажмите Enter. | |
|
| |
|
|
|
| вар № 2.
В Windows XP запустить можно через «пуск -> выполнить«. В Windows 7 такой трюк не пройдет — нет прав администратора, чтобы обойти создайте текстовый документ с содержанием
regsvr32 [имя файла.dll]
сохраните как com.bat (.bat – исполняемый файл) и запустите от имени администратора (правой кнопкой мыши по файлу).
п.с. ХР рулит!!!! | |
|
| |
|
40 Кб. |
|
| ЯЯЯЯЯЯЯЯЯЯЯ осууууууууеваюююююююю | |
|
| |
|
|
|
| эффекта нет.
С dll кой работать не получается. | |
|
| |
|
|
|
| У меня такая же проблема. Я уже отступил. Проблеме надо отстояться. Полежать под сукном.
| |
|
| |
|
|
74 Кб. |
|
| Если использовать совет Дрюни, то windows блокирует программу и после единичного запуска с ошибкой о том, что слишком сложная функция - программа просто перестаёт запускаться.
=====================
По советам Кот_т_т - регистрации не происходит.
У кого работает что то на подключении к DLL - как это реализовано? | |
|
| |
|
|
|
| Нашёл вот функцию динамической подгрузки библиотеки, но ругается на ( LB = LoadLibrary(Path))
Public Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Public Declare Function FreeLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal ÜÈïé As Long, ByVal Msg As Long, ByVal WPARAM As Long, ByVal LPARAM As Long) As Long
Public Function DLLOCX(ByVal hWnd As Long, ByVal Path As String, ByVal Register As Boolean) As Boolean
On Error Resume Next
Dim LB As Long, PA As Long
LB = LoadLibrary(Path)
If LB = 0 Then Exit Function
If Register = True Then
PA = GetProcAddress(LB, "DllRegisterServer")
Else
PA = GetProcAddress(LB, "DllUnregisterServer")
End If
If PA = 0 Then GoTo 0
Call CallWindowProc(PA, hWnd, ByVal 0&, ByVal 0&, ByVal 0&)
DLLOCX = True
0
Call FreeLibrary(LB)
End Function
|
| |
|
| |
|
|
|
| покажи код который у тебя вешает машину | |
|
| |
|
|
|
| Это было вчера, я уже на то забыл.
Сейчас вот что наклюнулось
Private Sub Command1_Click()
If DLLOCX(1, App.Path & "\DrvMercFR.dll", True) Then
....
...................
End If
End Sub
|
Всё работает без ошибок, но как теперь использовать функции этой динамически подключенной библиотеки? | |
|
| |
|
|
|
| Ошибок нет и регистрации не происходит и вобщем ничё не работает. | |
|
| |
|
|
|
| И где здесь решение Дрюни? | |
|
| |
|
|
|
| здесь нет решения Дрюни - это другой вариант.
а вот решение от дрюни, которое вешает систему
'Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" (ByVal _
' hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal _
' lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) | |
|
| |
|
|
|
| Заодно - ссылочка (всё об этом ..)
http://vsokovikov.narod.ru/New_MSDN_API/DLL/ogl_dll.htm
но чё та не пахает ..... | |
|
| |
|
|
|
| Если Дрюне не в лом - набросай пожалуйста Пример на VB6 или access - как мне подключится с этой библиотеке.
Третий день ничего путного не выходит.... | |
|
| |
|
|
|
| почитай вот это
http://incotexkkm.ru/forum/viewtopic.php?f=7&t=71
и по ссылкам в этой теме | |
|
| |
|
|
|
| спасибо!
Читал....
Из всего что я читал - понял - библиотеку регистрировать не нужно!
Вопрос - как использовать её функции?
Как ею пользоваться, если в референсах её нет!
Создать объект не представляется возможным, тогда - что? | |
|
| |
|
|
|
| в виндах есть
shell32.dll
она тоже не регистрируется в референсах и объект создать нельзя, но использовать ее можно используя Declare
В сети полно мест где есть текстовый файл содержащий описания для особо популярных виндовых библиотек (даже на hiprog есть пример)
КАК, какие в этой библиотеке есть функции и какие параметры они принимают лучше всего узнать у разработчиков.
или использовать спец. программы
например
http://www.nirsoft.net/utils/dll_export_viewer.html
Возможен вариант что ее вообще нельзя использовать из VB. | |
|
| |
|
|
|
| можно можно
Public Function DLLOCX(ByVal hwnd As Long, ByVal Path As String, ByVal Register As Boolean) As Boolean
On Error Resume Next
Dim LB As Long, PA As Long
Dim L As String
Dim LP As String
LB = LoadLibrary(Path)
If LB = 0 Then Exit Function
LP = "1"
L = "000000"
PA = GetProcAddress(LB, "Connect(" & LP & ",9600,30000," & L & ")")
If PA = 0 Then GoTo 0
Call CallWindowProc(PA, hwnd, ByVal 0&, ByVal 0&, ByVal 0&)
DLLOCX = True
0
End Function
Private Sub Command1_Click()
Call DLLOCX(1, App.Path & "\DrvMercFR.dll", False)
Call FreeLibrary(LoadLibrary(App.Path & "\DrvMercFR.dll"))
End Sub
|
| |
|
| |
|
|
|
| Вот описание встроеной функции, токиа соединения пока нет у мну.
.Управление соединением
/***********************************/
int stdcall Connect(unsigned char PortNum,
unsigned short BaudRate
unsigned short Timeout,
char pass[6]
);
Описание:
Функция открывает соединение с ККМ через последовательный интерфейс.
Параметры:
PortNum - номер COM-порта
BaudRate - скорость соединения(б/с.)
Timeout - таймаут в мс.(Максимально допустимое время ожидания ответа ККМ)
Возвращаемые значения:
SUCCESS – соединение успешно открыто.
ERR_INVALID_ARG – неверно заданы параметры соединения.
ERR_NO_RESPONSE – ККМ не ответил в течении времени заданного
параметром Timeout.
ERR_OS_ERROR - ошибка операционной системы
/**/
/*******************/
|
| |
|
| |
|
|
|
| Кое что проясняется
http://www.firststeps.ru/vba/vbahelp/r.php?11 | |
|
| |
|
|
|
| Ваще то есть такая библиотека - для доступа к функциям таких библиотек - как та, что попалася мне.
file:///C:/1_%D0%A2%D0%B5%D0%BA%D1%83%D1%89%D0%B5%D0%B5/1_AVTO_WASH/COMPONENTS/FR%20%D0%94%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80/Help.html#regsvr
После её регистации - всё становится проще
Private Sub Command2_Click()
Dim DX As Object
Dim res
Set DX = CreateObject("DynamicWrapperX") ' Создание объекта.
' вызов функции с параметрами
DX.Register App.Path & "\DrvMercFR.dll", "Connect", "i=hhhs", "r=l" ' Регистрация функции из dll.
res = DX.Connect(1, 9600, 400, "000000")
' вызов функции без параметров
DX.Register App.Path & "\DrvMercFR.dll", "Xreport" ' Регистрация функции из dll.
res = DX.XReport ' Вызов.
End Sub
|
| |
|
| |
|
|
|
| Чеки печатаются, отчёты тоже.
Вопрос - как получать параметры от функций???
Public Function IDENT_KKM() As Boolean
' Идентификация ККМ
Dim res
Set DX = CreateObject("DynamicWrapperX")
DX.Register App.Path & "\DrvMercFR.dll", "QueryEcrIdent", "i=uus", "r=UUS"
res = DX.QueryEcrIdent
MsgBox res
End Function
Эта конструкция выдаёт ошибку - не верные параметры или аргументы....
никак не пойму - как быть когда что то вернуть надо........
|
| |
|
| |
|
|
|
| Кстати о регистрации DLL и OCX в winde7
Нужна отключить в параметрах учётных записей - контроль учётных записей - поставить самый низкий уровень слежения.
И тада можно от имени админа - делать имену | |
|
| |