Форум программистов, компьютерный форум CyberForum.ru

Разница между вектором в борланде и VS - C++

Восстановить пароль Регистрация
 
_nic
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 112
13.09.2010, 17:03     Разница между вектором в борланде и VS #1
Если возращять вектор внутри структуры из ф-ции то в борланде все ОК.А вот в VS size возвращяет правильное число элементов,но сами элементы представляют из себя пустое место Почему так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2010, 17:03     Разница между вектором в борланде и VS
Посмотрите здесь:

Разница между i++ и ++i.Си C++
В чем разница между вектором и массивом C++
C++ Разница между 0 и 00 ?
C++ Разница между T **a и T *a[const_size]
C++ Разница между != и <=
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Manjak
 Аватар для Manjak
269 / 175 / 7
Регистрация: 12.03.2010
Сообщений: 494
13.09.2010, 17:10     Разница между вектором в борланде и VS #2
Приз (код) в студию.
_nic
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 112
13.09.2010, 17:45  [ТС]     Разница между вектором в борланде и VS #3
Сильно много текста будет =/
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
struct Speed//
{
    float visible;//
    long real;//
};
struct DiskInfo//
{
    std::string media;//
    __int64 fresz;//
    __int64 totalsz;//
    std::vector<Speed> speeds;//
};
void GetDiskInfo(std::string driveId,DiskInfo &info)
    {
        IDiscFormat2Data *FD;
        long totalsectors=0,freesectors=0;
        __int64 totalsize=0,freesize=0;
        IDiscRecorder2 *discRecorder;
        IMAPI_MEDIA_PHYSICAL_TYPE media;
        std::string mt="";
        for(;;)
        {
            hr = CoCreateInstance(__uuidof(MsftDiscRecorder2),NULL,CLSCTX_INPROC_SERVER,__uuidof(IDiscRecorder2),(void**)&discRecorder);
            if(hr==S_OK | hr!=0x8001010D){break;}
        }
        ErrorInfo(hr,"CoCreateInstance:IDiscRecorder2");
        hr = CoCreateInstance(__uuidof(MsftDiscFormat2Data) ,NULL,CLSCTX_INPROC_SERVER,__uuidof(IDiscFormat2Data),(void**)&FD);
        ErrorInfo(hr,"CoCreateInstance:IDiscFormat2Data");
        BSTR drvid;
        StrToBSTR(drvid,driveId);
        hr=discRecorder->InitializeDiscRecorder(drvid);
        ErrorInfo(hr,"IDiscRecorder2:InitializeDiscRecorder");
        BSTR cln;
        StrToBSTR(cln,std::string(ClientName));
        hr=discRecorder->AcquireExclusiveAccess(false,cln);
        ErrorInfo(hr,"IDiscRecorder2:AcquireExclusiveAccess");
        FD->put_Recorder(discRecorder);
        hr=FD->get_CurrentPhysicalMediaType(&media);
        //ErrorInfo(hr,"!!!!");
        if(hr==S_OK)
        {
            switch(media)
            {
                case IMAPI_MEDIA_TYPE_UNKNOWN:{mt="UNKNOWN";}break;
                case IMAPI_MEDIA_TYPE_CDROM:{mt="CD-ROM";}break;
                case IMAPI_MEDIA_TYPE_CDR:{mt="CD-R";}break;
                case IMAPI_MEDIA_TYPE_CDRW:{mt="CD-RW";}break;
                case IMAPI_MEDIA_TYPE_DVDROM:{mt="DVD-ROM";}break;
                case IMAPI_MEDIA_TYPE_DVDRAM:{mt="DVD-RAM";}break;
                case IMAPI_MEDIA_TYPE_DVDPLUSR:{mt="DVD+R";}break;
                case IMAPI_MEDIA_TYPE_DVDPLUSRW:{mt="DVD+RW";}break;
                case IMAPI_MEDIA_TYPE_DVDPLUSR_DUALLAYER:{mt="DVD+R DL";}break;
                case IMAPI_MEDIA_TYPE_DVDDASHR:{mt="DVD-R";}break;
                case IMAPI_MEDIA_TYPE_DVDDASHRW:{mt="DVD-RW";}break;
                case IMAPI_MEDIA_TYPE_DVDDASHR_DUALLAYER:{mt="DVD-R DL";}break;
                case IMAPI_MEDIA_TYPE_DISK:{mt="IMAPI_MEDIA_TYPE_DISK";}break;
                case IMAPI_MEDIA_TYPE_DVDPLUSRW_DUALLAYER:{mt="DVD+RW DL";}break;
                case IMAPI_MEDIA_TYPE_HDDVDROM:{mt="HD-DVD-ROM";}break;
                case IMAPI_MEDIA_TYPE_HDDVDR:{mt="HD-DVD-R";}break;
                case IMAPI_MEDIA_TYPE_HDDVDRAM:{mt="HD-DVD-RAM";}break;
                case IMAPI_MEDIA_TYPE_BDROM:{mt="BD-ROM";}break;
                case IMAPI_MEDIA_TYPE_BDR:{mt="BD-R";}break;
                case IMAPI_MEDIA_TYPE_BDRE:{mt="BD-RE";}break;
            }
            if(media!=0x1 && media!=0x4 && media!=0xc && media!=0xe && media!=0x12 && media!=0x13)
            {
                hr=FD->get_TotalSectorsOnMedia(&totalsectors);
                ErrorInfo(hr,"get_TotalSectorsOnMedia");
                hr=FD->get_FreeSectorsOnMedia(&freesectors);
                ErrorInfo(hr,"get_FreeSectorsOnMedia");
                totalsize=totalsectors*2048;
                freesize=freesectors*2048;
                VARIANT_BOOL blank;
                FD->get_MediaHeuristicallyBlank(&blank);
                if(blank==VARIANT_TRUE)
                {
                SAFEARRAY *ss;
                VARIANT *varar;
                hr=FD->get_SupportedWriteSpeeds(&ss);
                ErrorInfo(hr,"FD->get_SupportedWriteSpeeds");
                if(hr==S_OK)
                {
                    SafeArrayAccessData(ss,(void**)&varar);
                    std::vector<Speed> sp;
                    Speed spd;
                    ULONG totalWriteSpeeds = (ULONG)ss->rgsabound[0].cElements;
                    for (ULONG writeSpeedIndex = 0; writeSpeedIndex < totalWriteSpeeds; writeSpeedIndex++)
                    {
                        ULONG sectorsPerSecond = varar[writeSpeedIndex].ulVal;
                        if(media==0x2 | media==0x3)
                        {
                            spd.real=sectorsPerSecond;
                            spd.visible=rotateCD(sectorsPerSecond);
                        }
                        if(media==0x6 | media==0x7 | media==0x8 | media==0x9 | media==0xa | media==0xb)
                        {
                            //printf("\n %d \n",rotateDVD(sectorsPerSecond));
                            spd.real=sectorsPerSecond;
                            spd.visible=rotateDVD(sectorsPerSecond);
                        }
                        sp.insert(sp.begin(),spd);
                    }
                    SafeArrayUnaccessData(ss);
                    info.speeds=sp;
                    //printf("%d",info.speeds[0].real);
                }
                }
                if(blank==VARIANT_FALSE)
                {
                    /* */
                }
            }
            info.media=mt;
            info.fresz=freesize;
            info.totalsz=totalsize;
        }
        FD->Release();
        discRecorder->ReleaseExclusiveAccess();
        discRecorder->Release();
    }
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
13.09.2010, 18:07     Разница между вектором в борланде и VS #4
Цитата Сообщение от _nic Посмотреть сообщение
std::vector<Speed> sp;
удали эту строку, и работай с членом DiskInfo.speeds

Цитата Сообщение от _nic Посмотреть сообщение
sp.insert(sp.begin(),spd);
делается это так:
C++
1
info.speeds.push_back(spd);
Добавлено через 59 секунд
вообще-то, борланд, это последнее что стОит приводить как аргумент
_nic
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 112
13.09.2010, 18:29  [ТС]     Разница между вектором в борланде и VS #5
Так тоже там нули
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
13.09.2010, 19:52     Разница между вектором в борланде и VS #6
покажи как GetDiskInfo() используешь?
_nic
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 112
13.09.2010, 20:34  [ТС]     Разница между вектором в борланде и VS #7
Код
GetDiskInfo(RI[i].DeviceAccesId,DI);
		printf("%s disk size:%d\n",DI.media.c_str(),DI.totalsz);
		if(DI.speeds.size()>0)
		{
			printf("writing speeds: ");
			for(int j=0;j<DI.speeds.size();j++)
			{
				printf("%d X,%d",DI.speeds[j].visible,DI.speeds[j].real);
			}
			printf("\n");
		}
Вот так.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2010, 20:35     Разница между вектором в борланде и VS
Еще ссылки по теме:

C++ Разница между С и С++
C++ В чем разница между X x; и X x()?
C++ В чем разница между [] и * ?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
_nic
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 112
16.09.2010, 20:35  [ТС]     Разница между вектором в борланде и VS #8
Методом научного тыка определил что проблема была из за типа float члена сруктуры.Я в шоке, почему так??Это баг или такая фича VS??Или это фича реалезации вектора в RAD Studio ??
Yandex
Объявления
16.09.2010, 20:35     Разница между вектором в борланде и VS
Ответ Создать тему
Опции темы

Текущее время: 17:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru