0 / 0 / 1
Регистрация: 04.05.2010
Сообщений: 112
1

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

13.09.2010, 17:03. Показов 1015. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Если возращять вектор внутри структуры из ф-ции то в борланде все ОК.А вот в VS size возвращяет правильное число элементов,но сами элементы представляют из себя пустое место Почему так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2010, 17:03
Ответы с готовыми решениями:

Разница между списком и вектором
вот допустим в с++ есть такая тема как списки. препод мой по проги говорит ,что с помощью них можно...

В чем разница между вектором и массивом
Я учу язык С/С++ и хотел у вас спросить в чем разница между вектором и массивом ? кроме тогдо что...

Найти угол между радиус-вектором и вектором скорости
Здравствуйте! Помогите пожалуйста в решении задачи Закон движения точки имеет вид r=at2i+bt3j ,...

Угол между вектором и осью
Поверхность П (красная окружность) находится по углом 75градусов к плоскости ХоY. Синий вектор...

7
270 / 176 / 46
Регистрация: 12.03.2010
Сообщений: 494
13.09.2010, 17:10 2
Приз (код) в студию.
0
0 / 0 / 1
Регистрация: 04.05.2010
Сообщений: 112
13.09.2010, 17:45  [ТС] 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();
    }
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
13.09.2010, 18:07 4
Цитата Сообщение от _nic Посмотреть сообщение
std::vector<Speed> sp;
удали эту строку, и работай с членом DiskInfo.speeds

Цитата Сообщение от _nic Посмотреть сообщение
sp.insert(sp.begin(),spd);
делается это так:
C++
1
info.speeds.push_back(spd);
Добавлено через 59 секунд
вообще-то, борланд, это последнее что стОит приводить как аргумент
0
0 / 0 / 1
Регистрация: 04.05.2010
Сообщений: 112
13.09.2010, 18:29  [ТС] 5
Так тоже там нули
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
13.09.2010, 19:52 6
покажи как GetDiskInfo() используешь?
0
0 / 0 / 1
Регистрация: 04.05.2010
Сообщений: 112
13.09.2010, 20:34  [ТС] 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");
		}
Вот так.
0
0 / 0 / 1
Регистрация: 04.05.2010
Сообщений: 112
16.09.2010, 20:35  [ТС] 8
Методом научного тыка определил что проблема была из за типа float члена сруктуры.Я в шоке, почему так??Это баг или такая фича VS??Или это фича реалезации вектора в RAD Studio ??
0
16.09.2010, 20:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2010, 20:35
Помогаю со студенческими работами здесь

Расстояние между вектором и пространством
Есть векторы х и вектора е1 и е2, координаты известны. Нужно найти расстояние между вектором х и...

Угол между вектором и плоскостью
Вектора а и б образуют плоскость, нужно найти угол между этой плоскостью и вектором с. а=(2,3,4)...

Угол между вектором и осью OX на плоскости
Доброго вечера! Подскажите пожалуйста по какой формуле искать такое: Угол между вектором и осью OX...

дельфи угол между плоскостью и вектором
даны вектор а=(а1,а2,а3) и плоскость с уравнением Ax+By+Cz=0. нужно найти угол между вектором и...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru