Все вопросы связанные с программированием. Языки программирования. Средства разработки.
Ответить
Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

BDS 2006 и Variant?

Сообщение Borr »

Код: Выделить всё

AnsiString Cell = fromExcelCell(i,2);//тут ошибка

Variant __fastcall TPrix::fromExcelCell(int Row, int Column)
 {
   try{
        Variant result,cur;
        cur = Sh.OlePropertyGet("Cells",Row,Column);
        result = cur.OlePropertyGet("Value");
        return result;
      }catch(...) {;}
 }
Говорит E2015 Ambiguity between '_fastcall AnsiString::AnsiString(const WideString &)' and '_fastcall AnsiString::AnsiString(const AnsiString &)'

В 6-ке все нормально компилилось почему так? Eraser, ты в курсе? Исправить то я исправил (все к AnsiString привел), но неприятный осадок остался.

FastReport 2.55 на 2006 ставиться, в С++ компонент я вижу, но не компилиться требует bpi, которых нет вообще. Вот засада!
Стой там, иди сюда

Аватара пользователя
tAZAR
Не в сети
Модератор
Модератор
Сообщения: 567
Зарегистрирован: Ср июн 23, 2004 8:13
Откуда: г.Шахты

Сообщение tAZAR »

Говорит E2015 Ambiguity between '_fastcall AnsiString::AnsiString(const WideString &)' and '_fastcall AnsiString::AnsiString(const AnsiString &)'
Borr, здесь, скорее всего, то же, что и M$C:
WideString - unicode....
AnsiString - соответственно не может в юникод сам преобразовать.

Аватара пользователя
tAZAR
Не в сети
Модератор
Модератор
Сообщения: 567
Зарегистрирован: Ср июн 23, 2004 8:13
Откуда: г.Шахты

Сообщение tAZAR »

FastReport 2.55 на 2006 ставиться, в С++ компонент..
А если хочешь красивые отчеты - у меня RepoRTF есть с исходниками на с++/delphi, так что, можно будет переписать как душа пожелает, хотя - и без переделок его за глаза хватает. Единственное - ему нужен WordPad/Word/че-нить еще, что читает RTF....

Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

Сообщение Borr »

А если хочешь красивые отчеты - у меня RepoRTF
не в этом дело у меня в проэктах везде FastReport (в свое время кинулся на красоту с Qreport'a) а теперь нужно все переделывать!!!

З.Ы. в 2006 появлся RaveReport по функциональности, на первый взгляд, то же что и FastReport 2.55 но нужно разбираться, опять таки только на первый взгляд.
WideString - unicode....
AnsiString - соответственно не может в юникод сам преобразовать.
Так это выходит что Variant теперь на гора только WideString выдает? :( Теперь думать головой придется :( Ждем что скажет Eraser.
Стой там, иди сюда

Аватара пользователя
tAZAR
Не в сети
Модератор
Модератор
Сообщения: 567
Зарегистрирован: Ср июн 23, 2004 8:13
Откуда: г.Шахты

Сообщение tAZAR »

Так это выходит что Variant теперь на гора только WideString выдает..
Советую посмотреть, как определен WideString. Скорее всего - это шаблон..
Например:
typedef WideStringT< wchar_t, StrTraitMFC< wchar_t > > CStringW;
typedef WideStringT< char, StrTraitMFC< char > > CStringA;
typedef WideStringT< TCHAR, StrTraitMFC< TCHAR > > CString;

Это немного переделанные шаблоны из MFC.
1,3 - unicode/multibyte charset (wchar_t, TCHAR = _T(char))
2 - char - ansi

думаю, Borland не далеко от этого ушел. стандарт - таки :-)

Аватара пользователя
Hank
Не в сети
Почётный форумщик
Почётный форумщик
Сообщения: 4299
Зарегистрирован: Чт май 05, 2005 19:35
Откуда: RnD

Сообщение Hank »

Borr,
скорее всего проблема из-за мусора, оставленного предыдущей версией...
реализацию fromExcelCell - в студию )
tAZAR,
Советую посмотреть, как определен WideString

Код: Выделить всё

//    wstring.h - support for delphi widestrings in c++
//                (WideString)
// 1.1
//    copyright (c) 1997, 1999 Borland International

#ifndef WSTRING_H
#define WSTRING_H

#pragma delphiheader begin

#include <sysmac.h>
#include <dstring.h>

// Define this macro under Windows
#if defined(_Windows) && !defined(WIDESTRING_NO_BSTR)
#define WIDESTRING_IS_BSTR
#endif

//NOTE: sysmac.h defines WIDECHAR_IS_WCHAR when appropriate!

namespace System
{
  class RTL_DELPHIRETURN WideString
  {
  public:
    // Constructors
    //
    __fastcall WideString(): Data(0) {}
    __fastcall WideString(const char* src);
    __fastcall WideString(const WideString& src);
    __fastcall WideString(const AnsiString& src);
    __fastcall WideString(const WideChar* src, int len);
    __fastcall WideString(const WideChar* src);
#if !defined(WIDECHAR_IS_WCHAR)
    __fastcall WideString(const wchar_t* src, int len);
    __fastcall WideString(const wchar_t* src);
#endif
    __fastcall explicit WideString(char src);
    __fastcall explicit WideString(short src);
    __fastcall explicit WideString(unsigned short);
    __fastcall explicit WideString(int src);
    __fastcall explicit WideString(unsigned int);
    __fastcall explicit WideString(long);
    __fastcall explicit WideString(unsigned long);
    __fastcall explicit WideString(__int64);
    __fastcall explicit WideString(unsigned __int64);
    __fastcall explicit WideString(float src);
    __fastcall explicit WideString(double src);
    __fastcall explicit WideString(long double src);

    // Destructor
    //
    __fastcall ~WideString();

    // Assignments
    //
    WideString& __fastcall operator =(const WideString& rhs);
    WideString& __fastcall operator +=(const WideString& rhs);

#ifdef WIDESTRING_IS_BSTR
    WideString& __fastcall operator =(BSTR rhs);
#endif

#if 0
    // FIXME: remove these.  but first, we want to be sure that the new
    // global operators aren't introducing a ton of ambiguity problems
    // in existing code.
    // --xmsb (2002-01-24 23:08)

    // Comparisons
    //
    bool __fastcall operator ==(const WideString& rhs) const;
    bool __fastcall operator !=(const WideString& rhs) const;
    bool __fastcall operator < (const WideString& rhs) const;
    bool __fastcall operator > (const WideString& rhs) const;
    bool __fastcall operator <=(const WideString& rhs) const;
    bool __fastcall operator >=(const WideString& rhs) const;
#endif

  public:

    // Index
    //
    WideChar & __fastcall operator [](const int idx) { return Data[idx-1]; }

    // Concatenation
    //
    WideString __fastcall operator +(const WideString& rhs) const;

    // Access Data
    //
    bool __fastcall IsEmpty() const { return Data == 0; }

    // Careful! direct acces to internal data
    WideChar* __fastcall data()                    { return Data; }
    WideChar* __fastcall c_bstr() const            { return Data; }
    operator BSTR() const                          { return Data; }

    // Access internal data (Be careful when using!!)
    //
#ifdef WIDESTRING_IS_BSTR
    // these are definitely going away:  we can either act like a BSTR
    // or a Pascal WideString.  the former is what we need.
    // --xmsb (2002-01-24 23:06)
    BSTR* __fastcall operator& ()
    {
      return &Data;
    }
    
    // Attach/Detach from BSTR, Empty Object
    //
    void __fastcall Attach(wchar_t* src);
    BSTR __fastcall Detach();
    void __fastcall Empty();

    // Retrieve copy of data
    //
    static wchar_t* __fastcall Copy(wchar_t* src);

    wchar_t* __fastcall Copy() const
    {
      return Copy(Data);
    }

#endif

    wchar_t* __fastcall Copy(wchar_t *, int len) const;

    // Query attributes of object
    //
    int  __fastcall Length() const;

    // Modify string
    //
    void __fastcall Insert(const WideString& str, int index);
    void __fastcall Delete(int index, int count);
    void __fastcall SetLength(int newLength);

    int  __fastcall Pos(const WideString& subStr) const;
    WideString __fastcall SubString(int index, int count) const;

  private:
    // Initialize from a zero-terminated wide string
    void __fastcall InitStr(const WideChar*, int);
    WideChar* Data;
  };
  
  bool __fastcall operator ==(const WideString& lhs, const WideString& rhs);
  bool __fastcall operator !=(const WideString& lhs, const WideString& rhs);
  bool __fastcall operator < (const WideString& lhs, const WideString& rhs);
  bool __fastcall operator > (const WideString& lhs, const WideString& rhs);
  bool __fastcall operator <=(const WideString& lhs, const WideString& rhs);
  bool __fastcall operator >=(const WideString& lhs, const WideString& rhs);
}
using namespace System;
#pragma delphiheader end.

#endif
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )

Аватара пользователя
Hank
Не в сети
Почётный форумщик
Почётный форумщик
Сообщения: 4299
Зарегистрирован: Чт май 05, 2005 19:35
Откуда: RnD

Сообщение Hank »

Borr,
не в этом дело у меня в проэктах везде FastReport (в свое время кинулся на красоту с Qreport'a) а теперь нужно все переделывать!!!
насчет Qreportя же говорил - пищи решение в сети, оно точно есть.
FastReport тоже нужно скачать для версии 2006.
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )

Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

Сообщение Borr »

скорее всего проблема из-за мусора, оставленного предыдущей версией...
реализацию fromExcelCell - в студию
В первом посте это же было?

Код: Выделить всё

#include <Clipbrd.hpp>

Variant __fastcall TPrix::fromExcelCell(int Row, int Column)
 {
   try{
        Variant result,cur;
        cur = Sh.OlePropertyGet("Cells",Row,Column);
        result = cur.OlePropertyGet("Value");
        return result;
      }catch(...) {;}
 }
А FastReport 2.55 для 2006 я скачал поставил в C++ вижу компоненты но при компиляции не находяться bpi библиотеки. Директории прописал на винте проверил их вообще нигде нет!
Стой там, иди сюда

Аватара пользователя
Hank
Не в сети
Почётный форумщик
Почётный форумщик
Сообщения: 4299
Зарегистрирован: Чт май 05, 2005 19:35
Откуда: RnD

Сообщение Hank »

Borr,
В первом посте это же было?
упс... что называется смотрю в книгу .. ))

ЗЫ ещё как-то поведение типа variant регулировать можно, вроде того как интерпретировать нулевое значение... функций не помню.. щас попробовал найти - не удалось (
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )

Аватара пользователя
Hank
Не в сети
Почётный форумщик
Почётный форумщик
Сообщения: 4299
Зарегистрирован: Чт май 05, 2005 19:35
Откуда: RnD

Сообщение Hank »

задай вопрос сюда http://www.delphimaster.ru/cgi-bin/forum.pl?n=0
тут точно ответят.
Люблю повеселиться, особенно пожрать,
Люблю и поработать, особенно поспать )

Аватара пользователя
tAZAR
Не в сети
Модератор
Модератор
Сообщения: 567
Зарегистрирован: Ср июн 23, 2004 8:13
Откуда: г.Шахты

Сообщение tAZAR »

class RTL_DELPHIRETURN WideString
Вот это уже облом.
Эмм.
Опять же, в M$C:
CDBVariant класс имеет поля типа
m_pString
m_iVal;
m_lVal;
m_pStringW;
m_pStringA;
m_dwVal;
и т.д.
Во - первых: в каком виде данные сохранены в таблице?
Во - вторых: Variant - это класс, или опять же какая-то Борландовская обертка?
Если класс - советую посмотреть его определение и членов. Мобыть - там будет че-то типа m_pString...;
Учитывая то, что это OLE - скорее всего, новые ОЛЕ объекты будут в пропертях возвращать уже юникод, т.к. полный переход на Юникод наконец-таки свершился!!! хотя, все может быть.

Аватара пользователя
Borr
Не в сети
Частый гость
Частый гость
Сообщения: 338
Зарегистрирован: Ср сен 15, 2004 17:14
Откуда: Шахты
Контактная информация:

Сообщение Borr »

полный переход на Юникод наконец-таки свершился!!!
По чем опиум для народа? 8) [/code]
Стой там, иди сюда

Ответить