Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 Проблема со связкой C++ & Cache (Caché C++ Binding)  [new]
DarkKnight
Member

Откуда:
Сообщений: 9
Добрый день, сталкнулся с проблемой при кашовском класс-бинде и C++.
Коротко о системе:
  • Windows 7 x64
  • Visual Studio 2010
  • Cache2011.1 (dll и libы использую тоже от нее)

    Собираю приложение, при вызове функции коннкета приложение отваливается, сборка/линковка + обращения к дин. библиотеки проходит на ура.

    Пример:
    #include <iostream>
    #include <Windows.h>
    
    #include "cppbind.h"
    #include "database.h"
    
    
    #pragma comment(lib,"cppbind_msvc90.lib")
    
    using namespace std;
    
    int main(void)
    {
    	setlocale(LC_ALL,"Russian");
        Db_err conn_err;
    	d_connection conn;
    	try{
    		conn = tcp_conn::connect("localhost[1972]:User","_SYSTEM", "SYS", 0, &conn_err);
    	}catch (...)
    	{
    		cout << "Что то не так";
    	}
    
    	return 0;
    }
    *Результат работы без обработки исключений в прикрепл. файле.

    Хочется узнать, может кто-то сталкивался с подобной проблемой, или знает что это и как это лечиться.
    Заранее благодарен всем ответившим.

    К сообщению приложен файл. Размер - 31Kb
  • 23 окт 11, 14:35    [11484984]     Ответить | Цитировать Сообщить модератору
     Re: Проблема со связкой C++ & Cache (Caché C++ Binding)  [new]
    servit
    Member

    Откуда: г. Кишинёв, Республика Молдова
    Сообщений: 3084
    Блог
    DarkKnight,

    Ошибка возникает, потому что Вы пытаетесь использовать библиотеки cppbind_msvc90.lib/cppbind_msvc90d.lib (от версии 2008) применительно к версии 2010.

    Чтобы заработало сделайте следующее:

    1) откройте в VS2010 проект
    %CacheHome%\dev\cpp\src\modules\cpp\lib\msvc10_0\cpp_binding.vcxproj

    2) соберите проект для разных конфигураций. В итоге получите файлы cppbind_msvc10_0.dll, cppbind_msvc10_0d.dll, cppbind_msvc10_0.lib, cppbind_msvc10_0d.lib и т.д.

    3) в своём проекте замените cppbind_msvc90.lib на cppbind_msvc10_0.lib

    и всё заработает.
    24 окт 11, 15:43    [11489888]     Ответить | Цитировать Сообщить модератору
     Re: Проблема со связкой C++ & Cache (Caché C++ Binding)  [new]
    DarkKnight
    Member

    Откуда:
    Сообщений: 9
    servit,

    Спасибо Вам огромное за подсказку, помогите пожалуйста со следующим вопросом.

    Как вы и советовали собрал "либы", но собрались они увы не все конфигурации winit - не собралась.

    Ситуация теперь в следующем, коннект прекрасно проходит, но стоит обращаться к bind-проекциям Cache, компилятор ругается на линковку:
    автор
    1>  Для всех выходных данных обновления не требуется.
    1>main.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall InterSystems::User_Person::setcity(class InterSystems::d_string const &)" (?setcity@User_Person@InterSystems@@UAEXABVd_string@2@@Z)"
    1>main.obj : error LNK2001: неразрешенный внешний символ ""public: virtual class InterSystems::d_string __thiscall InterSystems::User_Person::getcity(void)const " (?getcity@User_Person@InterSystems@@UBE?AVd_string@2@XZ)"
    1>main.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall InterSystems::User_Person::setdob(class InterSystems::d_date const &)" (?setdob@User_Person@InterSystems@@UAEXABVd_date@2@@Z)"
    1>main.obj : error LNK2001: неразрешенный внешний символ ""public: virtual class InterSystems::d_date __thiscall InterSystems::User_Person::getdob(void)const " (?getdob@User_Person@InterSystems@@UBE?AVd_date@2@XZ)"
    1>main.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall InterSystems::User_Person::setname(class InterSystems::d_string const &)" (?setname@User_Person@InterSystems@@UAEXABVd_string@2@@Z)"
    1>main.obj : error LNK2001: неразрешенный внешний символ ""public: virtual class InterSystems::d_string __thiscall InterSystems::User_Person::getname(void)const " (?getname@User_Person@InterSystems@@UBE?AVd_string@2@XZ)"
    1>main.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall InterSystems::User_Person::setsalary(class InterSystems::d_double const &)" (?setsalary@User_Person@InterSystems@@UAEXABVd_double@2@@Z)"
    1>main.obj : error LNK2001: неразрешенный внешний символ ""public: virtual class InterSystems::d_double __thiscall InterSystems::User_Person::getsalary(void)const " (?getsalary@User_Person@InterSystems@@UBE?AVd_double@2@XZ)"
    1>main.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void __thiscall InterSystems::User_Person::setscore(class InterSystems::d_int const &)" (?setscore@User_Person@InterSystems@@UAEXABVd_int@2@@Z)"
    1>main.obj : error LNK2001: неразрешенный внешний символ ""public: virtual class InterSystems::d_int __thiscall InterSystems::User_Person::getscore(void)const " (?getscore@User_Person@InterSystems@@UBE?AVd_int@2@XZ)"
    1>C:\Users\Denis Goncharov\documents\visual studio 2010\Projects\xcache1\Debug\xcache1.exe : fatal error LNK1120: 10 неразрешенных внешних элементов
    1>
    1>СБОЙ построения.
    1>
    1>Затраченное время: 00:00:03.01


    А стоит закоментировать объект все ок.
    #include <iostream>
    #include <Windows.h>
    
    #include "cppbind.h"
    #include "database.h"
    
    #include "User_Person.h"
    
    #pragma comment(lib,"cppbind_msvc10_0d.lib")
    
    int main(void)
    {
    	setlocale(LC_ALL,"Russian");
    	Db_err conn_err;
    	d_connection conn = tcp_conn::connect("localhost[1972]:Samples","_SYSTEM", "SYS", 0, &conn_err);
       
    	if (conn_err) {
    		std::cerr << conn_err << '\n';
    		return -1;
    	}
        Database db(conn);
    	
    	std::cout<<"Установлено соединение"<<std::endl;
    	std::cout<<"Версия сервера :"<<db.get_library_version()<<std::endl;
    	
    	typedef d_ref <User_Person> db_Person;
    	//db_Person p;
    
    	return 0;
    }
    Результат выполнения:
    автор
    Установлено соединение
    Версия сервера :2011.1.1.600.0
    Для продолжения нажмите любую клавишу . . .


    Подскажите пожалуйста, какой либы не хватает при линковки, что именно из *.dll - cache у меня не собралось (если можно прикрепите библиотеку и ее либу в топ).

    Или может я просто совсем не в том направлении копаю. Заранее Вам спасибо.
    25 окт 11, 13:37    [11495146]     Ответить | Цитировать Сообщить модератору
     Re: Проблема со связкой C++ & Cache (Caché C++ Binding)  [new]
    servit
    Member

    Откуда: г. Кишинёв, Республика Молдова
    Сообщений: 3084
    Блог
    DarkKnight,

    Для компиляции конфигураций winit/winamd64 нужно поменять платформу с Win32 на x64 и соответственно поменять флаги препроцессора с WIN32 на WIN64.
    Отправил Вам на почту тестовый проект работы с объектами для обеих платформ (x32/x64). Во всех случаях программа работает отлично (проверял на версии 2011.2.FT3_x64).

    PS: предполагается, что Вы настроили переменные окружения CACHEBIN, CACHESYS и CACHECPPLIB: Configuring Microsoft Visual Studio 2008
    27 окт 11, 09:20    [11506584]     Ответить | Цитировать Сообщить модератору
    Между сообщениями интервал более 1 года.
     Re: Проблема со связкой C++ & Cache (Cach&#233; C++ Binding)  [new]
    VenumGodzilla
    Member

    Откуда:
    Сообщений: 2
    DarkKnight,Здравствуйте, можно вас попросить чуть-чуть помочь мне в вопросе связанным со связыванием VS 2015 и cache 2016.1 Я бы был очень признателен вам. Все вроде делаю по инструкции выдает

    Ошибка C2440 инициализация: невозможно преобразовать "const InterSystems::Registered_t *" в "const InterSystems::Persistent_t *c:\intersystems\cache\dev\cpp\include\obj_types.h 639

    это выдает и на vs 2008(((
    26 янв 18, 10:06    [21140642]     Ответить | Цитировать Сообщить модератору
     Re: Проблема со связкой C++ & Cache (Cach&#233; C++ Binding)  [new]
    DAiMor
    Member

    Откуда: Volzhsky -> Moscow -> CZ, Brno
    Сообщений: 2508
    VenumGodzilla,

    А можете какой нибудь ваш пример привести?
    26 янв 18, 10:32    [21140741]     Ответить | Цитировать Сообщить модератору
     Re: Проблема со связкой C++ & Cache (Cach&#233; C++ Binding)  [new]
    VenumGodzilla
    Member

    Откуда:
    Сообщений: 2
    DAiMor,
    В папке <cachesys> (папка в которой установлена cache) лежат файлы для взаимодействия с cache на разных платформах и яву(Java, Python, c++, c#)я хочу написать клиентское приложение на c++ VS 2015(на 2008 тоже самое), мне предоставлены библиотеки для 32/64 бит(cppbind_msvc120.lib, cppbind_msvc120d.lib, cppbind_msvc120d64.lib, cppbind_msvc120r64.lib)

    Делаю все по инструкции: имя переменной| значение переменной
    Захожу в Переменные среды->Создаю переменные: CACHEBIN| <Cachesys> \ Bin
    CACHECPPLIB| <Cachesys> \ DEV \ CPP \ Lib

    Добаил к системной переменной PATH следующее:
    ;% CACHEBIN%;% CACHECPPLIB%

    Дальше делаю все тоже по инструкции
    http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GBCP_intro#GBCP_intro_library
    несколько раз перепроверял

    Суть программы имеются разные значения в полях для которых я предварительно создал через генератор *.h && *.cpp файлы
    любой пример программы даже указанные выше пробовал
    Очень был бы признателен решившим помочь
    P.S. прошу не судить строго имею небольшой опыт в программировании
    26 янв 18, 14:35    [21141889]     Ответить | Цитировать Сообщить модератору
    Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить