Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.07.2014(UTC) Сообщений: 108  Откуда: Москва Сказал(а) «Спасибо»: 25 раз
|
Вот лог из DebugView при запуске моего примера:
... [3984] cades.dll: {5724} /CCadesApp::InitInstance/ CadesApp.cpp(16) : hInstance=000000006E000000 [3984] cades.dll: {5724} /CadesMsgIsTypeEncoded/ CadesMsgIsType.cpp(113) : (dwEncodingType=0x00010001, pbSignerInfo=0x000000000256A7A0, cbSignerInfo=4603, dwCadesType=0x0000005d, pbResult=0x000000000252B230) [3984] cades.dll: {5724} /CadesMsgIsTypeEncoded/ CadesMsgIsType.cpp(138) : (res=1, GetLastError=0x00000000 ...
--- может он наведет ваших разработчиков на какие-нибудь мысли?
В моем примере есть небольшая недоработка - нет вызова "GC.KeepAlive(pointersToRelease);" перед выходом из функции "Main". Вот так будет правильно:
... if (Marshal.ReadIntPtr(ptr).ToInt64() != 0) Console.WriteLine("Функция CadesMsgIsTypeEncoded вернула тип подписи CADES_X_LONG_TYPE_1"); else Console.WriteLine("Функция CadesMsgIsTypeEncoded вернула тип подписи НЕ CADES_X_LONG_TYPE_1");
GC.KeepAlive(pointersToRelease); } catch(Exception ex) ...
--- можете подправить и попробовать еще раз? Что при этом выводится в DebugView у Вас?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 18.02.2015(UTC) Сообщений: 16   Откуда: Москва Поблагодарили: 1 раз в 1 постах
|
Удалось повторить на вашем примере, но есть еще кое-что.
По вашей информации из DebugView pbResult=0x000000000252B230 ничего не скажешь. Это указатель, а надо смотреть что там по указателю хранится.
Смотрите, что только что мы сделали. Ваш пример запускался снова, но с пересобранной cades.dll, в которой в конце функции CadesMsgIsTypeEncoded вставлено небольшое логирование. Просто в лог-файл сохраняется значение возвращаемое в последнем параметре. То которое говорит соответствует подпись проверяемому типу или не соответствует. И, как в 32-х, так и 64-х одинаковые результаты - ноль, то есть подпись не X-LONG.
Однако, действительно, ваш пример при этом на консоль в 32-бита выводил "Функция CadesMsgIsTypeEncoded вернула тип подписи НЕ CADES_X_LONG_TYPE_1", а 64-бита "Функция CadesMsgIsTypeEncoded вернула тип подписи CADES_X_LONG_TYPE_1". Таким образом, выходит, что надо вам разобраться как верно значение параметра принимать в .NET, в 32-битной и 64-битной архитектуре.
|
 1 пользователь поблагодарил deniska68 за этот пост.
|
idtks оставлено 23.04.2015(UTC)
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.07.2014(UTC) Сообщений: 108  Откуда: Москва Сказал(а) «Спасибо»: 25 раз
|
Непонимаю... В следующей строке лога DebugView ваш код на c++ сообщает результат выполнения функции:
[3984] cades.dll: {5724} /CadesMsgIsTypeEncoded/ CadesMsgIsType.cpp(138) : (res=1, GetLastError=0x00000000
--- "res = 1" - разве не это значение записывается по указателю pbResult=0x000000000252B230? Единица это не правильный результат функции - и он получен кодом на c++.
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 10.07.2014(UTC) Сообщений: 108  Откуда: Москва Сказал(а) «Спасибо»: 25 раз
|
Я, кажется, разобрался. В предыдущем комментарии я был не прав: "res = 1" - это признак того, что функция выполнилась без ошибки. А вот чтобы мой пример заработал под 64бита надо было добавить очистку памяти выделенной под результат "pbResult":
... Marshal.WriteIntPtr(ptr, IntPtr.Zero); ...
--- странно, но под 32бита функция "CadesMsgIsTypeEncoded" не обращала внимания на мусор по указателю ptr / pbResult. А вот под 64бита уже стала...
Спасибо, за помощь :)
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 18.02.2015(UTC) Сообщений: 16   Откуда: Москва Поблагодарили: 1 раз в 1 постах
|
Вы верно разобрались.
Пожалуйста :)
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close