Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Заполнение структуры данных / 4 сообщений из 4, страница 1 из 1
16.11.2015, 14:35
    #39104528
aziker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение структуры данных
VS2015, Win32.
Заполнение структуры Info (вектора InfoCert) класса DataBase в методе (addCert) другого класса(AddList). То есть заполнения вектор "объектАМИ" (Info obj; -объект структуры), имеющие свойства pszName и SerialNumber, для дальнейшего использования свойств в других классах. Вопрос:
1) Как использовать указатель в данной программе для заполнения вектора и нужно ли очищать память?

2) Как правильно использовать объекты одного класса в других классах?

Код: plaintext
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.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
// DataBase.h=========================================================

#pragma once
#include <wincrypt.h>
#include <vector>

namespace Program {
class DataBase
{
public:
DataBase();
~DataBase();

typedef struct { //Структура Info
LPTSTR pszName;
LPCTSTR SerialNumber;

}Info;

int n = 100; //Максимальное количество объектов структуры
int i; //индекс для номера объекта, для использования цикла


std::vector<Info> InfoCert; //вектор InfoCert
std::vector<Info>::iterator it; //итератор it
Info obj; //обЪект вектора obj


void setpszName(LPTSTR pszName, int i); //фукнция для заполнения pszName
LPCTSTR getpszName(int i); //фукнция для получения pszName

void setSerialNumber(LPCTSTR SerialNumber, int i); //фукнция для заполнения SerialNumber
LPCTSTR getSerialNumber(int i); //фукнция для получения SerialNumber

};
}




//DataBase.cpp==================================================================
#include "stdafx.h"
#include "DataBase.h"
#include <windows.h>

namespace Program {
DataBase::DataBase()
{
}

DataBase::~DataBase()
{
}

void DataBase::setpszName(LPTSTR pszName, int i) {
InfoCert.push_back(obj);
InfoCert.at(i).pszName = pszName;
}

LPCTSTR DataBase::getpszName(int i) {
for (it = InfoCert.begin(); it != InfoCert.end(); it++) {
it->pszName = InfoCert.at(i).pszName;
return (InfoCert.at(i).pszName);
}
}

void DataBase::setSerialNumber(LPCTSTR SerialNumber, int i) {
InfoCert.push_back(obj);
InfoCert.at(i).SerialNumber = SerialNumber;
obj.SerialNumber = SerialNumber;
}


LPCTSTR DataBase::getSerialNumber(int i) {
for (it = InfoCert.begin(); it != InfoCert.end(); it++) {
it->SerialNumber = InfoCert.at(i).SerialNumber;
return (InfoCert.at(i).SerialNumber);
}
}
}



//AddList.cpp====================================================================
#include "DataBase.h"
#include <vector>
#include <windows.h>

namespace Program{

AddInList::AddInList()
{
}


AddInList::~AddInList()
{
}

DataBase s;



//======================================================================
UINT AddInList::addCert(HWND hList) {

int count = 0;
int row = 0;


for (int i = 0; i<sizeof(s.InfoCert); i++) { //Цикл для заполнения вектора

//...
while (pCertContext = CertEnumCertificatesInStore(
hCertStore,
pCertContext))
{

row++;




if (CertGetNameString( pCertContext,
CERT_NAME_SIMPLE_DISPLAY_TYPE,
0,
NULL,
pszName,
cbSize))

{
SendDlgItemMessage(hList, IDCL_LISTBOX, LB_ADDSTRING, NULL,
reinterpret_cast<LPARAM>(pszName));

//----------------------------------------------------------------------------------------
s.setpszName(pszName, i); //Вызов метода класса DataBase для заполнения первого свойства
//----------------------------------------------------------------------------------------
free(pszName);
}
else{idx = LB_ERR;}



//SN---------------------------------------------------------------------------
if (count == 0)
{
count++;
//...
if (CertGetCertificateContextProperty(
pCertContext,
dwPropId,
pCryptKeyProvInfo,
&cbData))
{
txt.appendLogText(TEXT("The current key container is "));
txt.appendLogText((LPCTSTR)(pCryptKeyProvInfo->pwszContainerName));
txt.appendLogText(TEXT("\n"));


//-----------------------------------------------------------------------------------------
s.setSerialNumber((LPCTSTR)(pCryptKeyProvInfo->pwszContainerName), i);
//Вызов метода класса DataBase для заполнения второго совйства объекта
//-----------------------------------------------------------------------------------------

free(pCryptKeyProvInfo);
}
else
{
free(pCryptKeyProvInfo);
txt.appendLogText(TEXT("The property was not retrieved.\n"));
}

//....

}

// Clean up.
if (hCertStore)
CertCloseStore(
hCertStore,
CERT_CLOSE_STORE_CHECK_FLAG);
return 0;
}
...
Рейтинг: 0 / 0
16.11.2015, 16:24
    #39104655
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение структуры данных
aziker,

На все твои (неудачно сформулированные) вопросы не отвечу -- не понял.

Но вот тут:

Код: plaintext
1.
2.
3.
4.
//----------------------------------------------------------------------------------------
s.setpszName(pszName, i); //Вызов метода класса DataBase для заполнения первого свойства
//----------------------------------------------------------------------------------------
free(pszName);



у тебя ошибка, так работать не будет. Время жизни твоего

Код: plaintext
1.
std::vector<Info> InfoCert;



должно быть больше или равно времени жизни каждой строки, на которую указывает pszName.
...
Рейтинг: 0 / 0
16.11.2015, 21:12
    #39104991
Зимаргл
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение структуры данных
Понял, не понял, там вообще писец, а не код.

Пусть курит ман и примеры от дарк вендора либы.
...
Рейтинг: 0 / 0
17.11.2015, 09:42
    #39105212
aziker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение структуры данных
MasterZiv,

Посмотрите, пожалуйста, http://www.sql.ru/forum/1185601/vektor-struktur?hl=
возможно этот вопрос покажется Вам более понятным.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Заполнение структуры данных / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]