powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Заполнение структуры данных
4 сообщений из 4, страница 1 из 1
Заполнение структуры данных
    #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
Заполнение структуры данных
    #39104655
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aziker,

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

Но вот тут:

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



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

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



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

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

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


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