powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / DLL своими руками
25 сообщений из 37, страница 1 из 2
DLL своими руками
    #37512078
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, смотрю на пример создания DLL http://vbcorner.narod.ru/faq/dll.html
Здравствуйте, хотел узнать когда создам DLL есть возможность как то её запаролить на использование, на открытие.
И вообще какой прогой можно внутрь DLL заглянуть?
Скомпилировал
Создалось три файла:
1TestDLL.dll
2TestDLL.lib
3TestDLL.exp
Зачем нужны 2 и 3 й??
код там у меня в dll простенький

Код: plaintext
1.
2.
3.
4.
 Option Explicit
 
Public Function Sum(ByVal a As Integer, ByVal b As Integer) As Integer
Sum = a + b
End Function 
и как потом, например в ВБА по аналогии подключать эту dll
Private Declare Function GetPadeg Lib "TestDLL.dll" Alias " GetFIOPadegFSAS " (ByVal a As Integer, ByVal b As Integer) As Integer
Вместо подчёркнутого что писать???
И остальное правильно? и откуда оно порождается?
нет ну когда такое простое а Интежер, в Интежер, что будет понятно, а если сложный код??
Спасибо
...
Рейтинг: 0 / 0
DLL своими руками
    #37512593
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сочиняю смотря на всякие примеры
Declare Function "TestDLL.dll" (a As Integer, b As Integer) As Integer
чего-то уж сильно коротко, да и всю строку выделило красным
Как же правильно???
...
Рейтинг: 0 / 0
DLL своими руками
    #37512640
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильно - почитать о Declare, а не ждать, что кто-то будет хелп перепечатывать
...
Рейтинг: 0 / 0
DLL своими руками
    #37512655
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понятен только пункт № 2
'синтаксис объявления API-функции
'1 Имяфункции. Имя функции или процедуры, под которым она будет доступна в коде Visual Basic-программы.
'Используют настоящие имена функций (как они определены в DLL-библиотеке) или псевдонимы, которые должны быть определены с помощью зарезервированного слова Alias.

'2 ИмяDLL-файла. Имя DLL-файла библиотеки, где содержится объявляемая функция.

'3 СписокПарамегров. Параметры функции или процедуры. Типы параметров должны быть совместимыми с С-типами, используемыми в API-функциях.

'4 ИмяТипа. Определяет тип возвращаемого функцией значения.

Есть в хелпе примеры
Declare Sub First Lib "MyLib" (X As Long)
Очень странно где намёк на файл *.dll ?? и откуда они родят First??
...
Рейтинг: 0 / 0
DLL своими руками
    #37512680
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если тебе непонятно написанное по-русски, то тебе не сюда, а на форум.... ну скажем детского развития.

И вообще подключи ее через References и отстань от Declare
...
Рейтинг: 0 / 0
DLL своими руками
    #37512730
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, ОК, без декларирования попробовал - нормально
Но всё же нужно с декларированием, как - мне не доходит
конечно, мне понятно, что строка декларирования будет выглядеть примерно так:
Declare Function Sum "TestDLL.dll" (a As Integer, b As Integer) As Integer
то есть из набора
Sum
"TestDLL.dll"
a As Integer
b As Integer
пробовал опять всё красным выделело, то есть не справляюсь
а в идеале мне будет нужно, три входных параметра As Integer, там в DLL крутит, вертит, на выходе 5 параметров String
Как сделать??
...
Рейтинг: 0 / 0
DLL своими руками
    #37512757
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читать хелп по Declare

Если ты на свое усмотрение выкидываешь их декларирования обязательные слова, то можешь дальше медитировать на красный цвет года два.
...
Рейтинг: 0 / 0
DLL своими руками
    #37512772
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

[Public | Private] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] [As type]

1 понятно - Public
2 понятно - Function
3 name - Обязательный параметр. Любое допустимое имя процедуры. Обратите внимание, что точки DLL вступления чувствительны к регистру.
В сообщение от вчера, 18:58 как оно зовётся?? У меня вариант один - Sum, так???
Потом двинусь дальше
...
Рейтинг: 0 / 0
DLL своими руками
    #37512778
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HELPЛюбое допустимое имя процедуры.
Ципихович ЭндрюУ меня вариант одинну ничем помочь не могу
...
Рейтинг: 0 / 0
DLL своими руками
    #37512795
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, тест на красное прошло успешно
Код: plaintext
1.
Declare Function Sum Lib "TestDLL.dll" (a As Integer, b As Integer) As Integer
Теперь в процедуре не прёт, две строки кода
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub fio()

Dim Class As New Class1
MsgBox Class.Sum( 10 ,  5 )

 
End Sub
На первой осечка
????
...
Рейтинг: 0 / 0
DLL своими руками
    #37512796
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я практически сам ничего не делал, только пользую изредка по готовым примерам, но вот например тут всё понятно:
Код: plaintext
1.
Declare Sub GetMem4 Lib "msvbvm60.dll" (ByVal SrcPointer As Long, ByVal DstPointer As Long)
или тут:
Код: plaintext
1.
Public Declare Function timeGetTime Lib "winmm.dll" () As Long
...
Рейтинг: 0 / 0
DLL своими руками
    #37512798
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121,

>но вот например тут всё понятно:
понятно и незыблемо, только "winmm.dll" - это название файла имеющегося в С:\виндовс\систем32
остальное
Код: plaintext
1Declare Sub GetMem4 Lib "msvbvm60.dll" (ByVal SrcPointer As Long, ByVal DstPointer As Long)
или тут:
Код: plaintext
2Public Declare Function timeGetTime Lib "winmm.dll" () As Long
откуда берётся например GetMem4???
Почему в одном случае после параметров есть 2() As Long есть что-то в другом ничего??
...
Рейтинг: 0 / 0
DLL своими руками
    #37512807
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюНа первой осечкаShocker.ProИ вообще подключи ее через References и отстань от Declare
...
Рейтинг: 0 / 0
DLL своими руками
    #37512809
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, легко, но этим буду пользоваться не только я
...
Рейтинг: 0 / 0
DLL своими руками
    #37512810
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович Эндрюоткуда берётся например GetMem4???
Почему в одном случае после параметров есть 2() 11278172 откуда берется Окна_кнопки и почему в скобочках ничего нет?
...
Рейтинг: 0 / 0
DLL своими руками
    #37512811
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюShocker.Pro, легко, но этим буду пользоваться не только я я сказал, как сделать, а чтобы понимать, почему так, тебе надо вникнуть в основы ООП. А ты пока не разобрался, чем отличается процедура от функции и что такое параметр. Так что пока займись вещами попроще, чем классы и dll
...
Рейтинг: 0 / 0
DLL своими руками
    #37512820
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, нашёл я у себя внятный пример, буду раскуривать вот это
Private Declare Function GetPadeg Lib "Padeg.dll" Alias "GetFIOPadegFSAS" _
(ByVal pFIO As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
Но тогда в это части вопроса подскажите
И вообще какой прогой можно внутрь DLL заглянуть?
Я пробую открыть ВБ6, говорит N:\Padeg.dll could not be loaded - то есть не может быть загружен, почему???
отсюда тоже часть из моего вопроса: когда создам DLL есть возможность как то её запаролить на использование, на открытие
...
Рейтинг: 0 / 0
DLL своими руками
    #37512824
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюИ вообще какой прогой можно внутрь DLL заглянуть?HEX-редактором, ASM-отладчиком... тебе зачем?Ципихович ЭндрюЯ пробую открыть ВБ6, говорит N:\Padeg.dll could not be loaded - то есть не может быть загружен, почему???попробуй загрузить JPG-файл. Когда не получится - спроси себя - почему. Про DLL-ответ будет примерно такой же.Ципихович Эндрюесть возможность как то её запаролить на использование, на открытиев пределе - нет )) можно просто осложнить доступ к ней.
...
Рейтинг: 0 / 0
DLL своими руками
    #37512842
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
>HEX-редактором, ASM-отладчиком, спасибо буду гуглить
>тебе зачем?
а как, например здесь разобраться, если все концы ведут в библиотеку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
Option Explicit

' Функция склонения ФИО с автоматическим определением пола по отчеству
' Параметры: pFIO    - фамилия, имя, отчество
'            nPadeg  - падеж (допустимые значения: 1..6)
'            pResult - буфер результата
'            nLen    - длина результата
' Значение:  0 - успешное завершение
'           -1 - недопустимое значение падежа
'           -3 - результат не помещается в буфере
Private Declare Function GetPadeg Lib "Padeg.dll" Alias "GetFIOPadegFSAS" _
                                  (ByVal pFIO As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer

' Функция преобразования cFIO в падеж nPadeg
Public Function MakePadeg(ByVal fio As String, ByVal nPadeg As Long) As String
    If fio = "" Then
        MakePadeg = "(ФИО получателя не задано)"
    Else
        Dim nLen As Long: nLen =  255 
        Dim tmpS As String: tmpS = String(nLen,  0 )
        Select Case GetPadeg(fio, nPadeg, tmpS, nLen)
        Case  0 : MakePadeg = Mid(tmpS,  1 , nLen)
        Case - 1 : MakePadeg = "(Недопустимое значение падежа - " & nPadeg & ")"
        Case - 2 : MakePadeg = "(Недопустимое значение рода)"
        Case - 3 : MakePadeg = "(Размер буфера недостаточен)"
        Case Default: MakePadeg = "(Неопознанная ошибка)"
        End Select
    End If
End Function

Public Sub ПросклонятьПолучателя(ByVal Получатель As String)
    ActiveDocument.Variables("Именительный").Value = MakePadeg(Получатель,  1 )
    ActiveDocument.Variables("Родительный").Value = MakePadeg(Получатель,  2 )
    ActiveDocument.Variables("Дательный").Value = MakePadeg(Получатель,  3 )
    ActiveDocument.Variables("Винительный").Value = MakePadeg(Получатель,  4 )
    ActiveDocument.Variables("Творительный").Value = MakePadeg(Получатель,  5 )
    ActiveDocument.Variables("Предложный").Value = MakePadeg(Получатель,  6 )
    ActiveDocument.Fields.Update
End Sub

Public Sub ВвестиФИО()
    Dim form As UserForm1
    Set form = New UserForm1
    form.Show
End Sub

Sub AddField(ByVal падеж As String)
    ActiveDocument.Fields.Add Range:=Selection.Range, Type:=wdFieldDocVariable, Text:=падеж
    ПросклонятьПолучателя (ActiveDocument.Variables("Именительный").Value)
End Sub

Public Sub Именительный()
    AddField ("Именительный")
End Sub
Public Sub Родительный()
    AddField ("Родительный")
End Sub
Public Sub Дательный()
    AddField ("Дательный")
End Sub
Public Sub Винительный()
    AddField ("Винительный")
End Sub
Public Sub Творительный()
    AddField ("Творительный")
End Sub
Public Sub Предложный()
    AddField ("Предложный")
End Sub

Public Sub Склонение()

    Dim Получатель As String
    Получатель = "Ципихович Эндрю"

    ПросклонятьПолучателя (Получатель)

End Sub
...
Рейтинг: 0 / 0
DLL своими руками
    #37512865
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
качнул, поставил отсюда http://www.softsoft.ru/development/other/47729.htm
такая ересь, и кодировать не нужно

Юстас Алексу
00 99 89 87 90 - и так много много раз, есть в чём то возможность типа как в блокноте смотрим модули
...
Рейтинг: 0 / 0
DLL своими руками
    #37513158
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такие утилитки, например DllView - можно посмотреть структуру DLL, входящие в нее функции, есть внятная ссылка на эту прогу, или может зальёте, если есть русская, поставил несколько, ничего не понятно, не вижу привычного File, чтобы открыть dll файл
...
Рейтинг: 0 / 0
DLL своими руками
    #37513166
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ципихович Эндрю,
а что Вы хотите увидеть в DLL? Название экспортируемых функций - да, адреса расположения в библиотеке, шестнадцатиричный код, может быть еще список системных вызовов. Вам-то это зачем? Что даст? Исходный код на VB Вам не покажут:-) Библиотека уже скомпилирована в двоичный код. Чисто поиграться? Держите.
...
Рейтинг: 0 / 0
DLL своими руками
    #37513172
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kuklp, спасибо, доходчиво
Чисто поиграться? - да нет же
есть в чём то возможность типа как в блокноте смотрим модули - я так понял, пролёт???
...
Рейтинг: 0 / 0
DLL своими руками
    #37513173
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в принципе можете не отвечать, Ваш ответ
>Исходный код на VB Вам не покажут:-) понятен, спасибо
...
Рейтинг: 0 / 0
DLL своими руками
    #37513175
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kuklp, посмотрел я прогу, тоже Юстас Алексу, но ведь Вы же можете километры кода спрятать в dll? Если да то как?
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / DLL своими руками
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]