Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: X' та я ваще туплю
 
 автор: час   (15.11.2011 в 12:59)   личное сообщение
 
 

Хочу использовать DLL (DrvMercFR.dll)
Dim MercFRDLL
Set MercFRDLL = CreateObject("AddIn.DrvMercFR")
========================================
А куда класть саму DLL чтобы к ней обращаться таким образом?
Попробовал в референсах - она не подключается там?

  Ответить  
 
 автор: час   (15.11.2011 в 13:02)   личное сообщение
20 Кб.
 
 

вот что пишет

  Ответить  
 
 автор: kot_k_k   (15.11.2011 в 13:07)   личное сообщение
 
 

а regsrv32 делал - ты ее сначала пропиши в винде

  Ответить  
 
 автор: час   (15.11.2011 в 13:11)   личное сообщение
 
 

не регистрируется скотина
И ваще это не ocx а dll
Её использовать как то нужно а не регистрировать.

  Ответить  
 
 автор: ddi   (15.11.2011 в 13:32)   личное сообщение
 
 


Попробовал в референсах - она не подключается там?


нет

  Ответить  
 
 автор: kot_k_k   (15.11.2011 в 14:25)   личное сообщение
 
 

http://am.rusimport.ru/MSAccess/topic.aspx?ID=650

посмотри

  Ответить  
 
 автор: ДрЮня   (15.11.2011 в 14:43)   личное сообщение
 
 

Эту 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)

  Ответить  
 
 автор: час   (15.11.2011 в 14:58)   личное сообщение
 
 

Спасибо.
Вот чё нарыл.

Только маленькое уточнение - в Вин семерке надо регить ДЛЛ-ки от имени администратора. Т.е. тупо как раньше:
DOSer писал(а):
Пуск-Выполнить:
regsvr32 "C:\Program Files\1cv81\bin\MercFPrt1C.dll"

выдает ошибку типа: "указанный модуль найден, но не удалось осуществить вход"

Надо либо CMD (командная строка) запускать от имени Админа, либо создавать ярлык для RegSvr32 "путь к DLL-ке" и запускать его от имени Администратора.


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

  Ответить  
 
 автор: час   (15.11.2011 в 15:14)   личное сообщение
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


пишет

  Ответить  
 
 автор: kot_k_k   (15.11.2011 в 15:14)   личное сообщение
 
 

хи-хи (злорадно потирая руки и размахивая плакатом "ХР РУЛИТ!!!")

Нажмите кнопку Пуск;
– в текстовое поле Найти программы и файлы введите cmd;
– в появившемся перечне (под заголовком Программы) нажмите правой кнопкой мыши cmd.exe;
– из контекстного меню выберите Запуск от имени администратора;
– введите пароль, если появится соответствующий запрос;
– в открывшемся окне Интерпретатора команд Windows после приглашения системы введите regsvr32 имя_файл, нажмите Enter.

  Ответить  
 
 автор: kot_k_k   (15.11.2011 в 15:15)   личное сообщение
 
 

вар № 2.

В Windows XP запустить можно через «пуск -> выполнить«. В Windows 7 такой трюк не пройдет — нет прав администратора, чтобы обойти создайте текстовый документ с содержанием

regsvr32 [имя файла.dll]

сохраните как com.bat (.bat – исполняемый файл) и запустите от имени администратора (правой кнопкой мыши по файлу).


п.с. ХР рулит!!!!

  Ответить  
 
 автор: час   (15.11.2011 в 15:19)   личное сообщение
40 Кб.
 
 

ЯЯЯЯЯЯЯЯЯЯЯ осууууууууеваюююююююю

  Ответить  
 
 автор: час   (15.11.2011 в 19:04)   личное сообщение
 
 

эффекта нет.
С dll кой работать не получается.

  Ответить  
 
 автор: Дядя Федор   (16.11.2011 в 08:43)   личное сообщение
 
 

У меня такая же проблема. Я уже отступил. Проблеме надо отстояться. Полежать под сукном.

  Ответить  
 
 автор: osmor   (16.11.2011 в 09:01)   личное сообщение
 
 

Дрюня уже ответил.

  Ответить  
 
 автор: час   (16.11.2011 в 09:41)   личное сообщение
74 Кб.
 
 

Если использовать совет Дрюни, то windows блокирует программу и после единичного запуска с ошибкой о том, что слишком сложная функция - программа просто перестаёт запускаться.
=====================
По советам Кот_т_т - регистрации не происходит.
У кого работает что то на подключении к DLL - как это реализовано?

  Ответить  
 
 автор: час   (16.11.2011 в 10:01)   личное сообщение
 
 

Нашёл вот функцию динамической подгрузки библиотеки, но ругается на ( 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 &#220;&#200;&#239;&#233; 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

  Ответить  
 
 автор: osmor   (16.11.2011 в 10:12)   личное сообщение
 
 

покажи код который у тебя вешает машину

  Ответить  
 
 автор: час   (16.11.2011 в 10:27)   личное сообщение
 
 

Это было вчера, я уже на то забыл.
Сейчас вот что наклюнулось

Private Sub Command1_Click()
If DLLOCX(1, App.Path & "\DrvMercFR.dll", True) Then
....
...................
End If
End Sub

Всё работает без ошибок, но как теперь использовать функции этой динамически подключенной библиотеки?

  Ответить  
 
 автор: час   (16.11.2011 в 10:42)   личное сообщение
 
 

Ошибок нет и регистрации не происходит и вобщем ничё не работает.

  Ответить  
 
 автор: osmor   (16.11.2011 в 10:48)   личное сообщение
 
 

И где здесь решение Дрюни?

  Ответить  
 
 автор: час   (16.11.2011 в 10:53)   личное сообщение
 
 

здесь нет решения Дрюни - это другой вариант.

а вот решение от дрюни, которое вешает систему
'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)

  Ответить  
 
 автор: час   (16.11.2011 в 11:02)   личное сообщение
 
 

Заодно - ссылочка (всё об этом ..)
http://vsokovikov.narod.ru/New_MSDN_API/DLL/ogl_dll.htm
но чё та не пахает .....

  Ответить  
 
 автор: час   (16.11.2011 в 11:07)   личное сообщение
 
 

Если Дрюне не в лом - набросай пожалуйста Пример на VB6 или access - как мне подключится с этой библиотеке.
Третий день ничего путного не выходит....

  Ответить  
 
 автор: osmor   (16.11.2011 в 11:21)   личное сообщение
 
 

почитай вот это
http://incotexkkm.ru/forum/viewtopic.php?f=7&t=71
и по ссылкам в этой теме

  Ответить  
 
 автор: час   (16.11.2011 в 11:35)   личное сообщение
 
 

спасибо!
Читал....
Из всего что я читал - понял - библиотеку регистрировать не нужно!
Вопрос - как использовать её функции?
Как ею пользоваться, если в референсах её нет!
Создать объект не представляется возможным, тогда - что?

  Ответить  
 
 автор: osmor   (16.11.2011 в 12:06)   личное сообщение
 
 

в виндах есть
shell32.dll
она тоже не регистрируется в референсах и объект создать нельзя, но использовать ее можно используя Declare
В сети полно мест где есть текстовый файл содержащий описания для особо популярных виндовых библиотек (даже на hiprog есть пример)

КАК, какие в этой библиотеке есть функции и какие параметры они принимают лучше всего узнать у разработчиков.
или использовать спец. программы
например
http://www.nirsoft.net/utils/dll_export_viewer.html

Возможен вариант что ее вообще нельзя использовать из VB.

  Ответить  
 
 автор: час   (16.11.2011 в 12:32)   личное сообщение
 
 

можно можно

    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

  Ответить  
 
 автор: час   (16.11.2011 в 12:34)   личное сообщение
 
 

Вот описание встроеной функции, токиа соединения пока нет у мну.


.Управление соединением
/***********************************/ 
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 - ошибка операционной системы                                    
/**/
/*******************/

  Ответить  
 
 автор: час   (16.11.2011 в 15:57)   личное сообщение
 
 

Кое что проясняется
http://www.firststeps.ru/vba/vbahelp/r.php?11

  Ответить  
 
 автор: час   (16.11.2011 в 17:19)   личное сообщение
 
 

Ваще то есть такая библиотека - для доступа к функциям таких библиотек - как та, что попалася мне.
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

DynamicWrapperX v1.0


После её регистации - всё становится проще
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

  Ответить  
 
 автор: час   (16.11.2011 в 22:32)   личное сообщение
 
 

Чеки печатаются, отчёты тоже.
Вопрос - как получать параметры от функций???

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

Эта конструкция выдаёт ошибку - не верные параметры или аргументы....
никак не пойму - как быть когда что то вернуть надо........

  Ответить  
 
 автор: час   (17.11.2011 в 15:03)   личное сообщение
 
 

Кстати о регистрации DLL и OCX в winde7
Нужна отключить в параметрах учётных записей - контроль учётных записей - поставить самый низкий уровень слежения.
И тада можно от имени админа - делать имену

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList