Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline sumatra  
#1 Оставлено : 9 сентября 2013 г. 18:32:50(UTC)
sumatra

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.05.2012(UTC)
Сообщений: 63
Мужчина
Российская Федерация
Откуда: Подмосковье

Сказал «Спасибо»: 5 раз
добрый день

прошу помощи...

есть собственный фреймворк, использующий CPROCSP.framework.
внутри этого самого собственного фреймворка есть c++ код, вызывающий FileTimeToSystemTime и SystemTimeToFileTime.

есть приложение, использующее этот собственный фреймворк.

при сборке этого приложения имею ошибки линковки: "неопределенный символ _FileTimeToDateTime (может быть вы имели в виду _CSP_FileTimeToDateTime?)" и аналогично для SystemTimeToFileTime.

вот тут вот - http://www.cryptopro.ru/...sts&t=4832#post28027 - я прочитал, что:

>>>
#define GetLastError CSP_GetLastError
#define SetLastError CSP_SetLastError
#define FileTimeToSystemTime CSP_FileTimeToSystemTime
#define SystemTimeToFileTime CSP_SystemTimeToFileTime

пожалуй, включу это в свежие версии CPROCSP.h

Причина примерно такая:
На ios всё линкуется статически. В некоторых популярных библиотеках есть функции с такими именами, а символы дублироваться не должны. Поэтому у нас после сборки фреймворка заменяются имена символов, чтобы избежать таких конфликтов.
Внутри нашей сборки и соответственно внутри хедеров фукнции имеют обычные имена, подмена имени происходит уже в готовой библиотеке (в противном случае, будет кошмар из ifdef IOS).



поиском по вашему фреймворку я смог найти только подобное определение GetLastError

может есть какая-то хитрость?
или ваш фреймворк у меня устарел? как, кстати, посмотреть его версию?


спасибо

Offline Татьяна  
#2 Оставлено : 10 сентября 2013 г. 11:18:06(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
впишите

#define GetLastError CSP_GetLastError
#define SetLastError CSP_SetLastError
#define FileTimeToSystemTime CSP_FileTimeToSystemTime
#define SystemTimeToFileTime CSP_SystemTimeToFileTime

в хедер

CPROCSP.h

я по каким-то причинам решила что поставлять хедер в таком виде плохо, уже не помню почему(попытаюсь найти в jira), но если хотите SystemTimeTofileTime и не писать руками префиксы CSP_, то или в CPROCSP.h или в тот файл с исходниками, откуда эти функции будут вызываться, надо дописать define.
Версия написана в нашей панели -- в верхней строчке CryptoPro CSP 3.6 <номер сборки>

Отредактировано пользователем 10 сентября 2013 г. 11:20:23(UTC)  | Причина: Не указана

Татьяна
ООО Крипто-Про
Offline sumatra  
#3 Оставлено : 10 сентября 2013 г. 11:31:08(UTC)
sumatra

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.05.2012(UTC)
Сообщений: 63
Мужчина
Российская Федерация
Откуда: Подмосковье

Сказал «Спасибо»: 5 раз
спасибо, Татьяна, за ответ

я пробовал явно указывать CSP_FileTimeToSystemTime

итог - ошибка компиляции "undeclared identifier"

что не так?

в этом cpp-файле присутствует вот это:
#include <CPROCSP/CPROCSP.h>


а в самом проекте определен макрос IOS (есть общий "кросс-платформенный" код)
может из-за этого макроса что-то не так?


Offline Татьяна  
#4 Оставлено : 10 сентября 2013 г. 12:06:12(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
поместите

#define GetLastError CSP_GetLastError
#define SetLastError CSP_SetLastError
#define FileTimeToSystemTime CSP_FileTimeToSystemTime
#define SystemTimeToFileTime CSP_SystemTimeToFileTime

перед

#include <CPROCSP/CPROCSP.h>
Татьяна
ООО Крипто-Про
Offline sumatra  
#5 Оставлено : 10 сентября 2013 г. 12:32:55(UTC)
sumatra

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.05.2012(UTC)
Сообщений: 63
Мужчина
Российская Федерация
Откуда: Подмосковье

Сказал «Спасибо»: 5 раз
всё, понятно
define FileTimeToSystemTime должен быть перед декларацией FileTimeToSystemTime
хорошо


еще маленький вопрос:

у вас макрос IOS определяется вот так:
#define IOS 1

вопрос - у вас нигде в коде нет сравнения IOS именно с 1? только if defined?
судя по директории headers, всё в порядке, но всё же...

Offline Татьяна  
#6 Оставлено : 10 сентября 2013 г. 14:51:44(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
про

#define IOS 1

это нормально, например autotools также определяют переменные, которые будут проверяться при помощи ifdef
Татьяна
ООО Крипто-Про
Offline sumatra  
#7 Оставлено : 10 сентября 2013 г. 22:29:07(UTC)
sumatra

Статус: Активный участник

Группы: Участники
Зарегистрирован: 23.05.2012(UTC)
Сообщений: 63
Мужчина
Российская Федерация
Откуда: Подмосковье

Сказал «Спасибо»: 5 раз
спасиба
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.