Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Указатели как параметры

3.5K
12 апреля 2004 года
zl0gzd3r
13 / / 23.08.2003
Есть функция и ней объявлен массив символов. Из этой фунции я вызываю другую и передаю ей уазатель на массив. Второй случай: тот же указатель я передал потоку (CreateThread). Третий случай: когда я через SendMessage отправляю соседней проге этот бедный указатель. Вопрос: когда удаляться _сами_ массивы, ведь зона видимости в виде финкции закончилась?
1.6K
12 апреля 2004 года
Unexpected
137 / / 09.12.2002
Цитата:
Originally posted by zl0gzd3r
Есть функция и ней объявлен массив символов. Из этой фунции я вызываю другую и передаю ей уазатель на массив.
Второй случай: тот же указатель я передал потоку (CreateThread).

Пямять освобождается при выходе из функции. Т.е. если ты в функции объявляешь массив, передаешь его потоку и функция НЕ БУДЕТ ждать завершения потока - будут проблемы.
Тут лучше самому создать динамический массив а потом не забыть его прибить.

Цитата:
Третий случай: когда я через SendMessage отправляю соседней проге этот бедный указатель. Вопрос: когда удаляться _сами_ массивы, ведь зона видимости в виде финкции закончилась?

Не прокатит. Адрес в одной программе не имеет смысла в другой. Они обитают в разных адресных пространствах.
Там, вроде, есть какая-то функция, чтобы отмаппить адрес одной программы в пространство другой, но на память я её не назову..

3.5K
14 апреля 2004 года
zl0gzd3r
13 / / 23.08.2003
Цитата:
Originally posted by Unexpected
Там, вроде, есть какая-то функция, чтобы отмаппить адрес одной программы в пространство другой, но на память я её не назову..


А если память выделить через GlobalAlloc(), а возвращаемый хэндл передать потоку или послать через SendMessage? А приниматель потом его удалит.

1.6K
14 апреля 2004 года
Unexpected
137 / / 09.12.2002
Цитата:
Originally posted by zl0gzd3r А если память выделить через GlobalAlloc(), а возвращаемый хэндл передать потоку или послать через SendMessage? А приниматель потом его удалит.

Сложно сказать. Не пробовал, но судя по хелпу - хендл можно транслировать в адрес, так что, похоже, можно.

1.6K
14 апреля 2004 года
Kadet
101 / / 26.03.2003
Цитата:
Originally posted by zl0gzd3r

А если память выделить через GlobalAlloc(), а возвращаемый хэндл передать потоку или послать через SendMessage? А приниматель потом его удалит.



В dos.h есть функция. Например чтобы отправить пусть будет символьную строку.

char str[200],s[100];
//заносиш чтото в str

sprintf(s,"",FP_SEG(str),FP_OFF(str));

Затем перезаёш в другую программу, там выбираеш из строки числа в int (пусть ch1 и ch2)

char *str;
str=(char*)MK_FP(ch1,ch2);

Далее - используй
В DOS проверено, конда через командную строку надо было и структуры и строки большой длинны передать(>256 символов).

В билдере help с примером есть.

3
14 апреля 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by zl0gzd3r
Есть функция и ней объявлен массив символов. Из этой фунции я вызываю другую и передаю ей уазатель на массив. Второй случай: тот же указатель я передал потоку (CreateThread). Третий случай: когда я через SendMessage отправляю соседней проге этот бедный указатель. Вопрос: когда удаляться _сами_ массивы, ведь зона видимости в виде финкции закончилась?



Для передачи информации между процессами используй механизмы межпроцессорного взаимодействия (Interprocess Communications):
1) File Mapping,
2) Clipboard,
3) Data Copy (WM_COPYDATA),
4) Mailslots,
5) Pipes,
6) DDE,
7) COM,
8) RPC (LPC),
9) Windows Sockets.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог