Возникла задача средствами VBS подключить DLL и вызывать экспортируемые ею функции, но к сожалению не представляю как это сделать, и инфы. по этому поводу тоже не нашел...
Если у кого-нибудь есть подобный опыт или соображения помогите плиизз!
Хотелось бы узнать можно ли работать напрямую с DLL без всяких "оберток"???
Dim API
...
API.CallFunction("user32.dll","BlockInput",true)
GM писал(а):Хотелось бы узнать можно ли работать напрямую с DLL без всяких "оберток"???
Насколько я знаю в VBS не предосмотрена возможность работы с ДЛЛ, так что напрямую не получиться, прийдется юзать обертку, либо тот же ActiveX который дает возможность вызывать API ф-ции, типа
- Код: Выделить всё
Dim API
...
API.CallFunction("user32.dll","BlockInput",true)
Да-да, у меня такая "универсальная обёртка" даже есть
Сделать её из кода GSerg-а либо Оловянникова (я делал из Оловянникова) - дело пяти минут.
Nash писал(а):Да-да, у меня такая "универсальная обёртка" даже есть
Сделать её из кода GSerg-а либо Оловянникова (я делал из Оловянникова) - дело пяти минут.
А где если не секрет код приведенных тобой людей посмотреть или если не жалко можешь свой кинуть???
Да-да, у меня такая "универсальная обёртка" даже есть
Сделать её из кода GSerg-а либо Оловянникова (я делал из Оловянникова) - дело пяти минут.
Option Explicit
Private Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxW" (ByVal hwnd As Long, ByRef lpText As Byte, ByRef lpCaption As Byte, ByVal wType As Long) As Long
Public Sub MyMsgBox()
Dim MyText() As Byte
Dim MyCaption() As Byte
MyCaption = "Hi!" & vbNullChar
MyText = "Hello World" & vbNullChar
MessageBox 0, MyText(0), MyCaption(0), &H0&
End Sub
Option Explicit
Dim Msg
Set Msg=CreateObject("MyMsg.dll")
Msg.MyMsgBox
WScript.Quit
Nash писал(а):Ну а тогда зачем извращаться с указателями, через ActiveX я любую API смогу вызвать напрямую, я то думал, что этот метод мне поможет прямо из VBS вызвать любую API
Видимо придется делать переходник через ActiveX...
Nash писал(а):
- Код: Выделить всё
...
Set Msg=CreateObject("MyMsg.dll")
...
И нифига - вылетает ошибка при запуске скрипта:
"Невозможно создание объекта контейнером ActiveX: MyMsg.dll"
Может кто знает в чем моя ошибка???
Именно затем и нужны указатели, чтобы вызывать любую API. Если ты будешь вызывать "напрямую", то для каждой новой API придётся писать новую обёртку (или дописывать старую).
Nash писал(а):Именно затем и нужны указатели, чтобы вызывать любую API. Если ты будешь вызывать "напрямую", то для каждой новой API придётся писать новую обёртку (или дописывать старую).
Да оно то понятно, но все равно особых преимуществ не вижу, разве что таблица импорта не будет заполнена вызываемыми API, ну и позновательно для тех, кто не знал про принципы вызова API на низком уровне...
Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 176