Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/47: Рейтинг темы: голосов - 47, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 18.09.2019
Сообщений: 22

Vbscript и подключаемые dll

18.09.2019, 10:12. Показов 10586. Ответов 13

Студворк — интернет-сервис помощи студентам
Всем привет и продуктивного дня!
Встала острая необходимость забабахать скрипт, который обращается к системной библиотеке windows WinSCard.dll. Данная библиотека работает со смарт картами. Рассматриваю варианты как jscript, так и vbscript. Сразу оговорюсь, что это не для web. Есть некое приложение, написанное сторонней организации, но в ней есть возможность пополнять функциональность используя скрипты.
Вопрос заключается в том, как мне считать библиотеку dll (очень нужно именно WinSCard.dll)?
Как мне вызвать функцию из библиотеки, передать/получить параметры (входные и выходные)? Хотелось бы с примером чтобы понять. Очень хотел бы пример конкретной функции, а именно из библиотеки WinSCard.dll функция long SCardEstablishContext(dword dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext)
Еще вопрос, то что функция возвращает параметры в отличие от процедуры, это мне понятно, но как определить какие входные, а какие выходные параметры внутри функции, имею ввиду в скобках?

Добавлено через 13 минут
Да, забыл написать, что обработать данную библиотеку командой regsrv32 не получается, "Модуль WinSCard.dll загружен, но точка входа DllRegisterServer не найдена"
Похоже применять применять придется GetObject, но я пока в этом не силен. В интернете примеры Excel, но это мне пока ничем не помогло
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.09.2019, 10:12
Ответы с готовыми решениями:

Динамически подключаемые библиотеки DLL в WIN32
Написать программу, реализующую DLL модуль для явной компоновки в режимах: • автоматической загрузки DLL; • загрузки DLL с помощью...

Куда "складывать" подключаемые DLL к проекту
куда складывать подключаемые пространства имен в вижуал студии, чтобы пользовать их. (имеются в виду подключаемые дллки)

Error in loading DLL при подключении Microsoft VBScript Regular Expressions 5.5.
VB6. Хочу подключить в References... библиотеку Microsoft VBScript Regular Expressions 5.5. Говорит, что 'Error in loading DLL'. ...

13
6993 / 2879 / 1108
Регистрация: 06.06.2017
Сообщений: 9,773
18.09.2019, 13:49
Цитата Сообщение от bigory225 Посмотреть сообщение
Как мне вызвать функцию из библиотеки, передать/получить параметры (входные и выходные)? Хотелось бы с примером чтобы понять.
Чтобы вызывать API, нужен доп. компонент типа DynamicWrapperX/wshAPIToolkitObject. Примеры в описании/демо.

Цитата Сообщение от bigory225 Посмотреть сообщение
то что функция возвращает параметры в отличие от процедуры, это мне понятно
Тут нет этого отличия.

Цитата Сообщение от bigory225 Посмотреть сообщение
но как определить какие входные, а какие выходные параметры внутри функции
Нужно смотреть описание функции. Какие параметры передаются как строки/числа, а какие принимаются как переменные.
Вложения
Тип файла: 7z dynwrapx.7z (13.0 Кб, 29 просмотров)
Тип файла: 7z wsh_api.7z (41.7 Кб, 30 просмотров)
1
0 / 0 / 0
Регистрация: 18.09.2019
Сообщений: 22
18.09.2019, 21:46  [ТС]
Спасибо! Надо бы все это "переварить"

Добавлено через 25 минут
Хотел бы уточнить такой момент про dynwrapx.dll. Данную библиотеку я могу обработать regsrv32 и использовать ее точку входа,верно?
Вызов
DX = new ActiveXObject("DynamicWrapperX");
или
DX = new ActiveXObject("dynwrapx");?
Просто в интернете в кавычках пишут имя dll, которую применяешь как com-сервер, а тут в примере названа по другому
0
 Аватар для bidstrup
419 / 179 / 27
Регистрация: 11.03.2018
Сообщений: 771
19.09.2019, 01:13
Мне кажется, что попроще будет 'забабахать' по найденным в сети примерам C++ приложение с необходимым
функционалом, а затем либо вызывать его с параметрами из скрипта, либо превратить его в COM-сервер.
Для последнего в сети примеры тоже имеются, но первый путь ( с параметрами ) проще.
1
6993 / 2879 / 1108
Регистрация: 06.06.2017
Сообщений: 9,773
19.09.2019, 04:07
Цитата Сообщение от bigory225 Посмотреть сообщение
Данную библиотеку я могу обработать regsrv32 и использовать ее точку входа,верно?
Вам нужно её просто зарегистрировать через к. меню с ПКМ.

Цитата Сообщение от bigory225 Посмотреть сообщение
Просто в интернете в кавычках пишут имя dll, которую применяешь как com-сервер, а тут в примере названа по другому
Я не знаю, что и в каком контексте пишут, но объект создаётся с указанием его ProgID (как в мануале).

Не по теме:

bidstrup, ну, забабахай, раз "попроще".

1
0 / 0 / 0
Регистрация: 18.09.2019
Сообщений: 22
19.09.2019, 11:04  [ТС]
Цитата Сообщение от bidstrup
Мне кажется, что попроще будет 'забабахать' по найденным в сети примерам C++ приложение с необходимым
функционалом, а затем либо вызывать его с параметрами из скрипта
Может быть и было бы проще, но наша организация не закупала лицензии на использовании этого языка

Еще вопрос по dynwrapx.dll
Нашел синтаксис вызываемой функции
C++
1
2
3
4
5
6
LONG WINAPI SCardEstablishContext(
  _In_  DWORD          dwScope,
  _In_  LPCVOID        pvReserved1,
  _In_  LPCVOID        pvReserved2,
  _Out_ LPSCARDCONTEXT phContext
);
Мой код вызова библиотеки и функции
JavaScript
1
2
3
4
5
6
7
var SDoc;
var hContext;
var result;
 
SDoc new = ActiveXObject("DynamicWrapperX");
SDoc.Register("WinSCard.dll", "SCardEstablishContext", "i=ussh", "r=l");
result = SDoc.SCardEstablishContext(0,null,null,hContext);
Конечно вылезает ошибка, что несоответствие типов. Думаю, ошибка в параметре hContext, так как он должен быть выходным, а в Register указан как входной. Так вот как указать что этот параметр выходной, если он находится внутри скобок функции? Правильно ли я остальные параметры указал?

Добавлено через 1 час 11 минут
Продвинулся чуть дальше. Вот исправленный мной вариант кода

JavaScript
1
2
3
4
5
6
7
var SDoc;
var hContext;
var result;
 
SDoc new = ActiveXObject("DynamicWrapperX");
SDoc.Register("WinSCard.dll", "SCardEstablishContext", "i=ussH", "r=L");
result = SDoc.SCardEstablishContext(1,null,null,hContext);
Ругается "Недопустимый вызов или аргумент процедуры"
Полагаю, что на hContext. Что делаю не так?
0
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
19.09.2019, 11:16
Можно вообще-то и не регистрировать com в системе, достаточно нарисовать для него манифест.
0
0 / 0 / 0
Регистрация: 18.09.2019
Сообщений: 22
19.09.2019, 12:05  [ТС]
Цитата Сообщение от greg zakharov
Можно вообще-то и не регистрировать com в системе, достаточно нарисовать для него манифест.
Мне тогда предстоит понять что это такое и как его использовать) Ну вроде как тот способ с библиотекой dynwrapx.dll заработало, ведь происходит обращение к библиотеке. Вопросы пока возникают как правильно ее использовать, чтобы запустить нужную мне функцию.

Сейчас пытаюсь понять для чего метод RegisterCallback
0
6993 / 2879 / 1108
Регистрация: 06.06.2017
Сообщений: 9,773
22.09.2019, 08:11
Цитата Сообщение от greg zakharov Посмотреть сообщение
достаточно нарисовать для него манифест.
Недостаточно. Еще wscript.exe в той же папке и манифест для него же.
А для этого уже давно нарисован:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 
<assemblyIdentity
    type="win32"
    name="dynwrapx.sxs"
    version="1.0.0.0" />
 
<file name="dynwrapx.dll" hash="1f87eeb37156d64de97d042b9bcfbaf185f8737d" hashalg="SHA1">
     <comClass
        description="DynamicWrapperX Class"
        clsid="{89565275-A714-4a43-912E-978B935EDCCC}"
        threadingModel="Both"
        progid="DynamicWrapperX" />
 
</file>
 
</assembly>

Цитата Сообщение от bigory225 Посмотреть сообщение
Ну вроде как тот способ с библиотекой dynwrapx.dll заработало
Подразумевалось использование без регистрации. В вашем случае я сразу понял, что это второстепенное. Только у меня банально нет времени ковырять смарткарты.
0
0 / 0 / 0
Регистрация: 18.09.2019
Сообщений: 22
23.09.2019, 08:47  [ТС]
Цитата Сообщение от FlasherX
Только у меня банально нет времени ковырять смарткарты.
Я всего лишь прошу подсказать мне некоторые моменты. Как мне вернуть значение полученное из dll в jscript. Имею ввиду не как значение функции, а как один из парамметров
0
0 / 0 / 0
Регистрация: 18.09.2019
Сообщений: 22
23.09.2019, 10:07  [ТС]
Вот фото с экрана. Скрин сделать не могу, комп без интернета.
Пробовал задавать выходную строку символом W,Z,S
Миниатюры
Vbscript и подключаемые dll   Vbscript и подключаемые dll   Vbscript и подключаемые dll  

0
0 / 0 / 0
Регистрация: 18.09.2019
Сообщений: 22
23.09.2019, 10:34  [ТС]
Теперь, когда я написал вот так:
JavaScript
1
2
3
4
5
6
...
var str="qwe";
...
SDoc.Register("C:\\PCSC.dll", "main", "i=lZ", "r=l");
st = SDoc.main(12,str);
SNUMB.value=str;
А в С++ исправил
C++
1
2
extern "C" __declspec(dllexport) int main(int args, string s)
...
При запуске не ругается на параметры, а просто висит и сбрасывается
0
6993 / 2879 / 1108
Регистрация: 06.06.2017
Сообщений: 9,773
23.09.2019, 15:53
Цитата Сообщение от bigory225 Посмотреть сообщение
Я всего лишь прошу подсказать мне некоторые моменты.
Я понимаю, но они завязаны на конкретном API. Используйте лучше эту вещь (в крайнем случае эту), упростите себе жизнь.
1
0 / 0 / 0
Регистрация: 18.09.2019
Сообщений: 22
23.09.2019, 18:06  [ТС]
Цитата Сообщение от FlasherX
упростите себе жизнь
Спасибо большое за помощь. Не видел это последнее сообщение, но задача выполнена. На досуге, или если потребуется исправить или доработать что-то, воспользуюсь тем материалом.

Помогли советы:
Цитата Сообщение от FlasherX
Чтобы вызывать API, нужен доп. компонент типа DynamicWrapperX/wshAPIToolkitObject. Примеры в описании/демо.
и
Цитата Сообщение от bidstrup
Мне кажется, что попроще будет 'забабахать' по найденным в сети примерам C++ приложение с необходимым функционалом, а затем либо вызывать его с параметрами из скрипта
Жаль что данного пользователя заблокировали

Уговорил руководство установить мне С++. Написал библиотеки dll, опираясь на примеры из сети по PSCS. Вызывал данные библиотеки через DynamicWrapperX. Не скажу что получилось грамотно, т.к. были сложности с получением параметров из функции. Логика получилась такая: str=func(1) - наименование считывателя, str=func(2) - ID карты.
Топорно, но работает
Всем спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.09.2019, 18:06
Помогаю со студенческими работами здесь

Ошибка об отсутствии MSVCP140D.dll, ucrtbased.dll, CONCRT140D.dll, VCRUNTIME140D.dll
Добрый день, товарищи. Возникла проблема. Делаю программу с использованием openCV 3.1 на Visual Studio 2013. При компиляции выдает ошибку...

Подключаемые модули
Помогите плиз начинающему, в общем нашел в инете инструкцию по настройки своей WiFi сетевой в FreeBSD, зато как подключить модуль...

Подключаемые модули
Подключаемые модули. 1. Основные положения Подключаемый модуль – файл, содержащий исходный текст на языке Pascal, имеющий...

Ввести слово с клавиатуры и вывести его с определённой позиции дисплея
Как в compmodel, через контроллер клавиатуры в контроллер дисплея записать слово и что бы слово начиналось не с 1 строки и 1 столбца, а к...

подключаемые файлы
Я использую много файлов (.h) в программе... В уже готовом exe файле они будут включены??? или мне придеться все эти хедеры с собой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru