Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lotus Notes/Domino: Программирование
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.66/99: Рейтинг темы: голосов - 99, средняя оценка - 4.66
ToxoRot
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
1

Lotusscript + Dll + Unicode Pointer

23.12.2010, 11:07. Просмотров 17920. Ответов 9
Метки нет (Все метки)

В общем необходимо вызвать функцию из виндовых библиотек
и вот не вьежаю как правильно её задекларить
Функция требует чтобы переменные были типа LPCWSTR
Читаю описание LPCWSTR
An LPCWSTR is a 32-bit pointer to a constant string of 16-bit Unicode characters, which MAY be null-terminated.
This type is declared as follows:
typedef const wchar_t* LPCWSTR;

но из всех возможных удаётся в декларе только variant
Declare Function CryptUIDlgSelectCertificateFromStore Lib "Cryptui" (Byval hCertStore As Long, Byval hwnd As Long, Byval pwszTitle As Variant...

вызываю просто:
Call CryptUIDlgSelectCertificateFromStore(hStore, 0, "Выбор"...

попытка передать массив байт, задекларить иначе, другими переменніми - или валит лотус или тайпмисмач

Собственно от Variant хотелось бы уйти и понять что именно ему передать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2010, 11:07
Ответы с готовыми решениями:

Передача Variant Из Lotusscript В Dll
Добрый день, уважаемые форумчане. Помогите, пжл, разобраться в ситуации: есть...

Запустить lotusscript c dll из xpages.
Добрый день! Не могу понять как решить задачу. Направьте на путь истинный. ...

Lotusscript
Доброго времени суток всем. Возникли некоторые вопросы по ЛС. Вообще он очень...

Webservice lotusscript
никогда не создавал на LS, но тут решил попробовать - задолбался первый же...

Lotusscript *.lss
Доброго времени суток уважаемые форумчане! Прошу строго не судить т.к. я не...

9
mvyush
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
23.12.2010, 11:25 2
Byval pwszTitle As LMBCS String ?
Можно также глянуть в справке дизайнера разделы "Passing strings", "Declare statement (external C calls)".

Также возможны варианты:
Byval pwszTitle As Unicode String
Byval pwszTitle As Any
0
ToxoRot
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
23.12.2010, 11:53 3
Цитата Сообщение от nvy
Byval pwszTitle As Unicode String
точно, спасибо, помогло :crash:

Добавлено: теперь следующий пример, более суровый


size := 0;
CertGetCertificateContextProperty(hCert, CERT_KEY_PROV_INFO_PROP_ID, nil, @size);
if size<>0 then begin
pKeyInfo := AllocMem(size);
CertGetCertificateContextProperty(hCert, CERT_KEY_PROV_INFO_PROP_ID, pKeyInfo, @size);
{ Set provyder parameters }
ProvyderName := pKeyInfo.pwszProvName;
ProvyderType := pKeyInfo.dwProvType;
KeyName := pKeyInfo.pwszContainerName;
KeySpec := pKeyInfo.dwKeySpec;
end;
суть момента в том что pKeyInfo это своего рода плавающая структура(её длина из-за наличия внутри стрингов разная)
описание MSDN


BOOL WINAPI CertGetCertificateContextProperty(
__in PCCERT_CONTEXT pCertContext,
__in DWORD dwPropId,
__out void *pvData,
__inout DWORD *pcbData
);
нормально удалось её задекларить лишь так
Declare Function CertGetCertificateContextProperty Lib "Crypt32" (Byval pCertContext As Long, Byval dwPropId As Long, Byval pvData As String, pcbData As Long) As Long
первый раз она возвращает длинну сертификата, второй раз ей предварительно передаётся обьект с нужной длинной, потом обьект как видим дер*цензура*ится
чтобы лотус не упал первый и второй раз, приходится передавать стринг
как-то можно потом не по символьно раздер*цензура*ить стринг на обьект?

ума не приложу как описать такой тип и еще и ресайзить его в лотусе
0
mvyush
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
23.12.2010, 12:20 4
Цитата Сообщение от ToxaRat
первый раз она возвращает длинну сертификата, второй раз ей предварительно передаётся обьект с нужной длинной, потом обьект как видим дер*цензура*ится
Это штатное использование такого рода функций http://msdn.microsoft.com/en-us/library/aa...v=vs.85%29.aspx
Нужно также иметь ввиду, что при втором вызове также возвращается истинный размер данных, помещённых в буфер, он может быть меньше размера буфера.

Судя по описанию функции CertGetCertificateContextProperty ( http://msdn.microsoft.com/en-us/library/aa...v=vs.85%29.aspx ) то, что она возвращает в буфере, зависит от параметра dwPropId. Можно попробовать реализовать требуемые структуры данных на LS и передавать в качестве буфера переменные соответствующего типа, а функцию задекларировать так:
Declare Function CertGetCertificateContextProperty Lib "Crypt32" (Byval pCertContext As Long, Byval dwPropId As Long, pvData As Any, pcbData As Long) As Long
0
tmyky
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
23.12.2010, 12:31 5
а зачем понадобилось криптоапи виндей?... пароли прятать хотите? :crash:
дык по темже усером - оно полюбасу будет доступно
этож не keyring - как в нормальных системах, а очередной МС костыль (на почве SSO)
0
tyo
0 / 0 / 0
Регистрация: 08.04.2015
23.12.2010, 12:52 6
Цитата Сообщение от ToxaRat
ума не приложу как описать такой тип и еще и ресайзить его в лотусе
В таких случаях делаю разные декларации и один альяс. Что-то вроде:

Declare Function CertGetCertificateContextProperty1 Lib "Crypt32" Alias "CertGetCertificateContextProperty" (..., pvData As MyType1, ...) As Long
Declare Function CertGetCertificateContextProperty2 Lib "Crypt32" Alias "CertGetCertificateContextProperty" (..., pvData As MyType2, ...) As Long
Declare Function CertGetCertificateContextProperty3 Lib "Crypt32" Alias "CertGetCertificateContextProperty" (..., ByVal pvData As MyType3, ...) As Long
0
ToxoRot
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
23.12.2010, 13:26 7
Цитата Сообщение от nvy
Это штатное использование такого рода функций ]]>http://msdn.microsoft.com/en-us/library/aa...v=vs.85%29.aspx]]>
Нужно также иметь ввиду, что при втором вызове также возвращается истинный размер данных, помещённых в буфер, он может быть меньше размера буфера.
так вот и я про это как бы я не обьявлял свои тип такую фичу как в Сях - pKeyInfo := AllocMem(size); я в лотусе сделать не могу - а НАДО
так как в следующий момент этот тип становится на 50 байт больше/меньше



а зачем понадобилось криптоапи виндей?... пароли прятать хотите?
не, как раз таки всё проще, большинство локальных сертифицированных криптопровайдеров начали использовать этот интерфейс - там можно назначать какой криптопровайдер юзать и всё становится напорядок проще а не затачиваться постоянно под индивидуала :crash:
0
mvyush
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
23.12.2010, 14:07 8
Цитата Сообщение от ToxaRat
так вот и я про это как бы я не обьявлял свои тип такую фичу как в Сях - pKeyInfo := AllocMem(size); я в лотусе сделать не могу - а НАДО
так как в следующий момент этот тип становится на 50 байт больше/меньше
Больше не должно. Иначе может лечь не только Лотус, но и система. А вместо pKeyInfo := AllocMem(size) обычно используется
pKeyInfo = String$(size, Chr$(0)). Если возвращаемая структура содержит только одно строковое поле и оно последнее, его размер легко вычислить, зная размеры остальных полей фиксированного размера, и тогда в качестве буфера в вызов функции можно подставлять переменную соответствующего типа. В противном случае остаётся только парсить строку.
0
ToxoRot
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
23.12.2010, 14:38 9
Цитата Сообщение от nvy
А вместо pKeyInfo := AllocMem(size) обычно используется
pKeyInfo = String$(size, Chr$(0)).
именно так и сделал



Цитата Сообщение от nvy
Если возвращаемая структура содержит только одно строковое поле и оно последнее, его размер легко вычислить
правду говоришь, но тут как раз всё плохо так как два стринга 1я и 3я переменная...
0
mvyush
0 / 0 / 0
Регистрация: 19.04.2009
Сообщений: 2,219
23.12.2010, 14:53 10
Можно поискать парсеры ASN.1. Кой-чего можно почитать тут: http://book.itep.ru/4/44/asn44132.htm
0
23.12.2010, 14:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2010, 14:53

Lotusscript -> Javascript
Имеется простенький поиск на lotusscript, который берет из бд строки с именами...

проверка на Lotusscript
Помогите написать на LotusScript проверку заполнения обязательных полей на...

Lotusscript And Word
Всем привет! Есть такая проблема, в WORDe через макрос команда записи в...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru