ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

01.08.2009, 15:53
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
компилятором воспользоваться. например в visual studio.
|
|
|

01.08.2009, 22:11
|
|
Познавший АНТИЧАТ
Регистрация: 30.04.2007
Сообщений: 1,206
Провел на форуме: 4778940
Репутация:
1257
|
|
нужно работать с dll как с com объектом (в ней всего 5 функций - одна из них - DllGetClassObject).
это всё конечно хорошо, но разбираться с com слишком долго. есть готовые либы\функции которыми можно загрузить такую dll и юзать её com функции?
|
|
|

01.08.2009, 23:53
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
Ra$cal, дописал я наконец хедер. Несколько дней напрягался! Посмотри, если не лень и скажи свое мнение по поводу проделанной мною работы
->хедер<-
|
|
|

02.08.2009, 03:22
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
на первый онный взгляд все вполне норм. тока для начала не советую загромождать интерфейс класса методами перегружеными, которые не очень востребованы. в твоем случае это int*, ибо проще при вызове для таких мест сделать *value.
DATA* Find(int* node_num)const;//Искать узел с заданным номером
этот метод убрать под private. и старайся не делать меотдов с int* параметрами, если только это не массивы(это относится ко всем типам, особенно встроенным). ибо просто так числа по указателю передают если это массив или если туда возвращается значнеие. в твоем случае не понятно. если параметр только для чтения - обязательно дополняй его словом const. чтобы пользователь метода четко знал, что метод не изменит эту переменную. правда это обычно юзают для ссылок на объекты классов, чтобы избегать лишних созданий копий. но это потом поймешь =)
зы: не юзай укаазтели в членах данных класса без острой необходимости. иначе будут проблемы с конструкторами копирования. если не переопределишь - по умолчанию конструктор просто копирует поля. в твоем случае создается 2 объекта DATA, поля в которых указывают на одинаковую память. в итоге если один удалит значение - во втором объекте будет неверное значение считываться. и заипешься вычислять эту багу... старайся меньше юзать указателей. это не самая сильная сторона с++ =)
Последний раз редактировалось Ra$cal; 02.08.2009 в 03:39..
|
|
|

02.08.2009, 13:30
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
Сообщение от Ra$cal
в твоем случае это int*, ибо проще при вызове для таких мест сделать *value.
Тут немного не понял что ты имеешь ввиду
Сообщение от Ra$cal
DATA* Find(int* node_num)const;//Искать узел с заданным номером
этот метод убрать под private.
Это да, я просто в конце доделал другой поиск с показом а про этот забыл
Сообщение от Ra$cal
и старайся не делать методов с int* параметрами
ммм, а указатель разве не меньше памяти требует, если он только передает в другой метод адрес, вместо создания нового инта?
Сообщение от razb
При передачи параметров по значению они копируются в стек, в случае с встроенными типами это не так уж критично, указатели стоит использовать при передачи данных больших обьемов (массивы, обьекты (хотя тут лучше ссылки) и т.д.), необходимости возвратить больше одного значения из ф-ции.
Убрал все int* параметры, и оставил их простыми интами.
Сообщение от Ra$cal
если не переопределишь - по умолчанию конструктор просто копирует поля
Я обычно для проверки делаю так:
Код:
DATA(DATA&) { cout << "copy constructor...\n"; }
Таким образом проверяю, не вызывается ли конструктор копировщик. Когда его вижу - значит переделываю то что вызывает его. На этот раз не видел, потому и думал что все в порядке. А где именно он вызывается?
Я ж вроде везде только адреса передаю и присваиваю их указателям и контролирую чтоб не удалилось значение. А методы, в которых я использую - не возвращают ничего, за исключением возврата тех же указателей на предидущие и следующие узлы и поиска, который так же указатель возвращает...
Сообщение от Ra$cal
старайся меньше юзать указателей. это не самая сильная сторона с++ =)
Мне просто помнятся слова нашего препода, что если освоить работу с указателями и списками - дальше проблем не будет и что указатели - одно из мощнейших средств с++) Потому и юзал их)
З.Ы. нужно в подписи фразу "Ra$cal, спасибо большое еще раз" вставить 
Последний раз редактировалось horlyk; 02.08.2009 в 14:47..
|
|
|

02.08.2009, 14:21
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
ммм, а указатель разве не меньше памяти требует, если он только передает в другой метод адрес?
При передачи параметров по значению они копируются в стек, в случае с встроенными типами это не так уж критично, указатели стоит использовать при передачи данных больших обьемов (массивы, обьекты (хотя тут лучше ссылки) и т.д.), необходимости возвратить больше одного значения из ф-ции.
|
|
|

02.08.2009, 15:09
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
Мне просто помнятся слова нашего препода, что если освоить работу с указателями и списками - дальше проблем не будет и что указатели - одно из мощнейших средств с++) Потому и юзал их)
мощные - да. но все надо в меру =) научиться ты научился, теперь тренируйся их разумно использовать =)
ммм, а указатель разве не меньше памяти требует, если он только передает в другой метод адрес, вместо создания нового инта?
фишка в том что указатель на инт и инт занимают по 4 байта на 32 битных машинах. так что никакого выигрыша на встроенных типах. как razb написал это выгодно с объектами, конструктор которых ощутим. например передавать вектора из 10 000 элементов разумнее по ссылке(тот же указатель, только вместо -> пишешь . что гораздо удобнее. читани главу про ссылки, они удобнее указателей =)
Я обычно для проверки делаю так:
это правильно =)
|
|
|

03.08.2009, 13:31
|
|
Познавший АНТИЧАТ
Регистрация: 30.04.2007
Сообщений: 1,206
Провел на форуме: 4778940
Репутация:
1257
|
|
средствами с++ нужно выполнить команду в "командной строке" и получить её результат. как? перенаправление в файл не предлагать.
|
|
|

03.08.2009, 15:10
|
|
Участник форума
Регистрация: 04.11.2007
Сообщений: 103
Провел на форуме: 548128
Репутация:
104
|
|
выполнить команду в "командной строке" и получить её результат.
man popen
Код:
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
char path[256];
fp = popen("ls", "r");
while (fgets(path, 256, fp) != NULL) {
printf("%s", path);
}
pclose(fp);
return 0;
}
|
|
|

03.08.2009, 15:16
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
CreateProcess и CreatePipe
А лучше google + непривязываться к языкам програмирования. Потому как API оно и в африке абгдырдыщ.
В Delphi World есть парочку исходников на эту тему:
"Как захватить весь вывод в консоли"
"Запустить консольное приложение и получить его стандартный вывод"
"CreateProcess, который возвращает консольный вывод"
Там оснавная часть кода написана на API по этому переписать на Си не составит труда.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|