powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / struct **
11 сообщений из 11, страница 1 из 1
struct **
    #39400289
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер, коллеги!
Нужна помощь.
В коде ниже на выходе получаем список из 10 Struct PERSON1.
Заполняется только 1, остальные пустые.
Как заполнить еще один, не могу понять.
Спасибо за помощь.

Код: 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.
struct PERSON1
{
	int   id;
	char* name;
	int   age;
	int   sex;
};


extern "C" __declspec(dllexport) void  WINAPI getA(PERSON1 ** p, int *c)
{
	if ( *p) {
		for (int i = 0; i < *c; i++) {
			::CoTaskMemFree((*p)[i].name);
			(*p)[i].name = nullptr;
		}
		::CoTaskMemFree(*p);
		*p = nullptr;
	}
	
	size_t sz = 10;
	PERSON1 *pt = (PERSON1*)CoTaskMemAlloc(sz*sizeof PERSON1);
	memset(pt, 0, sz * sizeof PERSON1);
	 
	 pt->age = 800;
	 std::string n = "asdf";
	 pt->name = (char*)::CoTaskMemAlloc(n.length()+1);
	 memcpy(pt->name,  n.c_str(), n.length()+1);

	 *p = pt;
	 *c = sz;
}
...
Рейтинг: 0 / 0
struct **
    #39400304
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замени "pt->" на "pt[0]." и, возможно, тебя осенит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
struct **
    #39400345
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipok,

дикий треш...

DLL-и, Com, выделение памяти, std::string... -- и парень тупо не умеет работать с указателями...
Нафига браться ?

Как заполнить ещё один
-- научить отличать массив от элемента массива.
-- напиши цикл по обработке элементов массива, внутри -- заполняй.
...
Рейтинг: 0 / 0
struct **
    #39400514
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivдикий треш...
это для интеропа с c#
не пугайся, там именно такие соглашения о выделении памяти
...
Рейтинг: 0 / 0
struct **
    #39400565
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЗамени "pt->" на "pt[0]." и, возможно, тебя осенит.



Код: 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.
extern "C" __declspec(dllexport) void  WINAPI getA(PERSON ** p, int *c)
{
	if (*p) {
		for (int i = 0; i < *c; i++) {
			::CoTaskMemFree((*p)[i].name);
			(*p)[i].name = nullptr;
		}
		::CoTaskMemFree(*p);
		*p = nullptr;
	}


	size_t sz = 10;
	PERSON *pt = (PERSON*)CoTaskMemAlloc(sz * sizeof PERSON);
	memset(pt, 0, sz * sizeof PERSON);

	pt[0].age = 800;
	string n = "asdf";
	pt[0].name = (char*)::CoTaskMemAlloc(n.length() + 1);
	memcpy(pt[0].name, n.c_str(), n.length() + 1);

	pt[1].age = 800;
	n = "vadim";
	pt[1].name = (char*)::CoTaskMemAlloc(n.length() + 1);
	memcpy(pt[1].name, n.c_str(), n.length() + 1);



спасибо, все работает

Засуну все в Loop, и думаю проблема будет решена
...
Рейтинг: 0 / 0
struct **
    #39400571
ermak.nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилMasterZivдикий треш...
это для интеропа с c#
не пугайся, там именно такие соглашения о выделении памяти

А зачем extern "C" здесь нужен, если это будет использоваться в C#? Кажется мне, что этот код кое-какие компиляторы даже не скомпилируют.
...
Рейтинг: 0 / 0
struct **
    #39400599
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ermak.nnИзопропилпропущено...

это для интеропа с c#
не пугайся, там именно такие соглашения о выделении памяти

А зачем extern "C" здесь нужен, если это будет использоваться в C#? Кажется мне, что этот код кое-какие компиляторы даже не скомпилируют.

В C# он работает без нареканий.
...
Рейтинг: 0 / 0
struct **
    #39400765
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ermak.nnА зачем extern "C" здесь нуженЧтобы декорации имён не было.
...
Рейтинг: 0 / 0
struct **
    #39400955
ermak.nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipokermak.nnпропущено...


А зачем extern "C" здесь нужен, если это будет использоваться в C#? Кажется мне, что этот код кое-какие компиляторы даже не скомпилируют.

В C# он работает без нареканий.

Давно я не трогал windows.
...
Рейтинг: 0 / 0
struct **
    #39400994
Common Lisp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ermak.nnДавно я не трогал windows.При чём тут windows?
...
Рейтинг: 0 / 0
struct **
    #39401202
ermak.nn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Common Lispermak.nnДавно я не трогал windows.При чём тут windows?
C#, __declspec(dllexport), WINAPI

extern "C" оставалось единственным непонятным, но вы разъяснили Common LispЧтобы декорации имён не было.
так что теперь все понятно.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / struct **
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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