Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / DLL своими руками / 25 сообщений из 37, страница 1 из 2
04.11.2011, 18:58
    #37512078
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
Здравствуйте, смотрю на пример создания 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
05.11.2011, 14:33
    #37512593
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
сочиняю смотря на всякие примеры
Declare Function "TestDLL.dll" (a As Integer, b As Integer) As Integer
чего-то уж сильно коротко, да и всю строку выделило красным
Как же правильно???
...
Рейтинг: 0 / 0
05.11.2011, 15:28
    #37512640
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
правильно - почитать о Declare, а не ждать, что кто-то будет хелп перепечатывать
...
Рейтинг: 0 / 0
05.11.2011, 15:49
    #37512655
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
понятен только пункт № 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
05.11.2011, 16:20
    #37512680
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
Если тебе непонятно написанное по-русски, то тебе не сюда, а на форум.... ну скажем детского развития.

И вообще подключи ее через References и отстань от Declare
...
Рейтинг: 0 / 0
05.11.2011, 17:32
    #37512730
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
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
05.11.2011, 18:01
    #37512757
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
Читать хелп по Declare

Если ты на свое усмотрение выкидываешь их декларирования обязательные слова, то можешь дальше медитировать на красный цвет года два.
...
Рейтинг: 0 / 0
05.11.2011, 18:14
    #37512772
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
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
05.11.2011, 18:25
    #37512778
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
HELPЛюбое допустимое имя процедуры.
Ципихович ЭндрюУ меня вариант одинну ничем помочь не могу
...
Рейтинг: 0 / 0
05.11.2011, 18:50
    #37512795
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
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
05.11.2011, 18:51
    #37512796
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
Я практически сам ничего не делал, только пользую изредка по готовым примерам, но вот например тут всё понятно:
Код: 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
05.11.2011, 18:57
    #37512798
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
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
05.11.2011, 19:10
    #37512807
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
Ципихович ЭндрюНа первой осечкаShocker.ProИ вообще подключи ее через References и отстань от Declare
...
Рейтинг: 0 / 0
05.11.2011, 19:11
    #37512809
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
Shocker.Pro, легко, но этим буду пользоваться не только я
...
Рейтинг: 0 / 0
05.11.2011, 19:12
    #37512810
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
Ципихович Эндрюоткуда берётся например GetMem4???
Почему в одном случае после параметров есть 2() 11278172 откуда берется Окна_кнопки и почему в скобочках ничего нет?
...
Рейтинг: 0 / 0
05.11.2011, 19:14
    #37512811
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
Ципихович ЭндрюShocker.Pro, легко, но этим буду пользоваться не только я я сказал, как сделать, а чтобы понимать, почему так, тебе надо вникнуть в основы ООП. А ты пока не разобрался, чем отличается процедура от функции и что такое параметр. Так что пока займись вещами попроще, чем классы и dll
...
Рейтинг: 0 / 0
05.11.2011, 19:30
    #37512820
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
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
05.11.2011, 19:36
    #37512824
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
Ципихович ЭндрюИ вообще какой прогой можно внутрь DLL заглянуть?HEX-редактором, ASM-отладчиком... тебе зачем?Ципихович ЭндрюЯ пробую открыть ВБ6, говорит N:\Padeg.dll could not be loaded - то есть не может быть загружен, почему???попробуй загрузить JPG-файл. Когда не получится - спроси себя - почему. Про DLL-ответ будет примерно такой же.Ципихович Эндрюесть возможность как то её запаролить на использование, на открытиев пределе - нет )) можно просто осложнить доступ к ней.
...
Рейтинг: 0 / 0
05.11.2011, 19:50
    #37512842
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
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
05.11.2011, 20:15
    #37512865
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLL своими руками
качнул, поставил отсюда http://www.softsoft.ru/development/other/47729.htm
такая ересь, и кодировать не нужно

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


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