Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,278 Сказал «Спасибо»: 548 раз Поблагодарили: 2196 раз в 1714 постах
|
Автор: MWB Dmitry Автор: Андрей * Думаю проблема в том, что запускаете не тот exe. EXE не запу3скается вообще WSH - работает внутри основного EXE В 32 битном? Соберите для 64х |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,278 Сказал «Спасибо»: 548 раз Поблагодарили: 2196 раз в 1714 постах
|
Какая задача то? Почему не решается прямой работой из нативного кода?
Это для внутренних нужд такое только? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.02.2024(UTC) Сообщений: 73 Сказал(а) «Спасибо»: 2 раз
|
D2007 не умеет Win64. Перенести в юникодную дельфи легаси-проект нельзя, я уже писал, сыпется в-с-ё. До меня дважды пробавали, я посмотрел что там за кошмарики внутри и даже пытаться пока не буду. А может и никогда. > Почему не решается прямой работой из нативного кода? Запретили... Я хз что там "вверху" за соображения. Возможно, их уже не помнят, но увы. Общая "теория", что как 1С и МС Офис, программа делится на "ядро" и "конфигурацию", и все, что можно и нельзя, надо переносить в VBScript/JScript.
В любом случае, явно вскрылась какая-то принципиальная ошибка в CADESCOM, которая периодически приводит к шрёдинбагам. Только как до неё добраться... Я даже минимизированный тест-кейз с исходниками не могу сделать, хз сколько на это времени будет нужно. > Это для внутренних нужд такое только? не понял вопроса
придется пока костылить опять через WScript.exe :-/ Отредактировано пользователем 14 февраля 2024 г. 12:45:16(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,278 Сказал «Спасибо»: 548 раз Поблагодарили: 2196 раз в 1714 постах
|
Криптографию наружу в скрипты... Ясно, печально.
В то, что среда старая.. И нет 64х, понятно. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,278 Сказал «Спасибо»: 548 раз Поблагодарили: 2196 раз в 1714 постах
|
traceall_x64.zip (1kb) загружен 3 раз(а).И через DBGVIEW посмотреть Или все опции включены эти уже? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.02.2024(UTC) Сообщений: 73 Сказал(а) «Спасибо»: 2 раз
|
Ну я же писал - https://www.cryptopro.ru...&m=145574#post145574Вот настройки: regedit_ahU3wDJN4m.png (36kb) загружен 0 раз(а). regedit_uTjpw8PbPv.png (44kb) загружен 0 раз(а). regedit_mMiVpLyNu1.png (13kb) загружен 0 раз(а).В момент ошибки ничего в DBGVIEW не падает - и НЕ МОЖЕТ. До вашего кода ничего не дохожит. WSH/JSCRIPT получает VARIANT со ссылкой на какой-то ваш объект - IUnknown либо IDispatch - (или со ссылкой на другой VARIANT с котором ссылка на VARIANT в котором....) и пытается там найти метод Open в каком-то из интерфейсов. Судя по https://cpdn.cryptopro.r.../class_certificates.html он там должен быть один, в котором есть метод Open Но интерфейс не найден и движок Dispatch Automation падает ДО вызова вашего кода.--- а в промежутке между кодом JScript и вашим - могут быть касты и к iUnknown и к iDispatch и к iEventSource и к чему угодно. И если вы там не свою обертку делаете, а берёте какой-то макройсофтовский готовый объект - то обратный каст уже не пройдёт, например. Я упоминал немецкую библиотеку, которая был так сломана... Если бы я мог в нативном коде повторить - я бы оттрассировал этот процесс, но... Я даже допускаю, что в нашем коде WSH-обёртки каким-то диким образом вмешиваются в этот процесс поиска интерфейсов, хотя со стандартным CAPICOM ничего не ломается. Если будет время, я пороюсь вглубь, если придумаю где. Сегодня вряд ли Ну и самый первый пост намекает ,что где-то сделано ненадёжно....
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.02.2024(UTC) Сообщений: 73 Сказал(а) «Спасибо»: 2 раз
|
К сожалению, нативно - опять все работает и не падает... Код:
var
v: Variant;
o: OleVariant;
u: iUnknown;
d: iDispatch;
begin
try
CoInitialize(nil); // OleInitialize(nil);
v := CreateOleObject('CAdESCOM.Store');
// здесь потенциально везде получения новых объектов-делегатов
u := v;
d := u as iDispatch;
u := d;
v := u;
o := v;
// d := o; // EVariantCast
d := iUnknown(o) as IDispatch;
u := d;
v := u;
v := iUnknown(v) as IDispatch;
v.Open(2,'My',0);
WriteLn('Store.Open passed');
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close