Хакер писал(а):Не надо это проверять. 1000 раз это уже проверили, о чём тебе здесь и твердили.
Так это что же получается, Declare нельзя считать ранним связыванием? Получается, это связывание позднее, динамическое?
Хакер писал(а):Не надо это проверять. 1000 раз это уже проверили, о чём тебе здесь и твердили.
Денис писал(а):Так это что же получается, Declare нельзя считать ранним связыванием?
Денис писал(а):Получается, это связывание позднее, динамическое?
Насколько я понимаю термин "динамическое": раннее связывание и динамическое связывание - не есть противоположности. Вполне можно осуществить раннее динамическое связывание. И даже предпочтительнее - делать динамическое связывание именно ранним.Денис писал(а):Получается, это связывание позднее, динамическое?
Хакер писал(а):Обычный импорт: нужная функция объявляется в TLB, TLB подключается к проекту. Вызывается как обычная функция.
Отложенный импорт: нужная функция объявляется с помощью Declare Sub/Function, почти так же, как обычная. Вызывается как обычная функция.
Хакер писал(а):Функция, импортируемая через TLB, импортируется через обычную таблицу импорта PE-файла. Для неё создаётся ячейка в IAT, для неё создаётся jmp-thunk, для её библиотеки создаётся дескриптор импорта в таблцие импорта. Её импорт обрабатывает системный загрузчик в ядре, и если библиотеки/экспорта он не найдёт, файл вообще не загрузится.
Vi писал(а):до вызова метода
Хакер писал(а):Метода? Я про функции, обычные, которые располагаются в модулях, а не являются членами кокласса с флагом APPGLOBAL.
Private Sub Form_Click()
Dim x() As Double, bs() As Double, p() As Double, p2() As Double
Call A_BSCPP(0, x(), 3, bs(), 0, p(), p2())
End Sub
[
uuid(610B38D2-577F-11D6-A449-004095426E66),
version(1.0),
helpstring("FlexiDLL Library")
]
library FlexiDLL
{
[
uuid(610B38D3-577F-11D6-A449-004095426E66),
dllname(".\FlexiDLL.DLL")
]
module Flexi
{
...
[
helpstring("Convert a spline in B-spline representation to piecewise polynomial representation (array version)"),
entry("A_BSCPP")
]
HRESULT stdcall A_BSCPP
(
[in] long KORDER,
[in] SAFEARRAY(double) * XKNOT,
[in] long NCOEF,
[in] SAFEARRAY(double) * BSCOEF,
[in,out] long * NPPCF,
[in,out] SAFEARRAY(double) * PPBREAK,
[in,out] SAFEARRAY(double) * PPCOEF
);
kiber_punk писал(а):ИМЕННО КОД
Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Private Sub Form_Load
MessageBox Me.hWnd, "Это текст", "Это заголовок", 0
End Sub
Vi писал(а):В данном случае, метод - это функция, которая определена в ДЛЛ.
kiber_punk писал(а):Так вот. Я же не просто так тему создал. Мне даже неведома сама конструкция объявления и вызова.
Продемонстрируйте пожалуйста простенький пример (из 5 строк) объявления и вызова MessageBox(A) из user32.dll через отложенный импорт ИМЕННО КОД.
Private Declare Function MessageBoxA Lib "user32" _
(ByVal Parent As Integer, ByVal msg As String, ByVal caption As String, ByVal Textype As Integer) As Long
Private Sub Command1_Click()
a = MessageBoxA(0, "test", "Caption", 0)
End Sub
Есть такая программка C:\Program Files\Microsoft Visual Studio\Common\Tools\Winapi\APILOAD.EXE. (Раньше она у меня была в меню Add-ins, но потом исчезла, так что привожу путь к ней для автономного запуска) Она позволяет много деклараций сделать с её помощью. Там рядом есть две базы WIN32API.MDB и WIN32API.TXT. Есть также описание.
http://bbs.vbstreets.ru/viewforum.php?f=24kiber_punk писал(а):Ссылки ни одной никто не предложил, ну да ладно, всё самому приходится делать.
kiber_punk писал(а):Тулзу нашёл, но вот как её включить в меню? Перерыл все опции, но ни "Add-ins", ни "Configure tools" не нашёл.
Кто-нить знает?
Посоветуйте литературу/статьи/ресурсы(ссылки) по использованию WinAPI в VB.
Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 93