HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #3401  
Старый 01.08.2009, 15:53
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

компилятором воспользоваться. например в visual studio.
 
Ответить с цитированием

  #3402  
Старый 01.08.2009, 22:11
mr.The
Познавший АНТИЧАТ
Регистрация: 30.04.2007
Сообщений: 1,206
Провел на форуме:
4778940

Репутация: 1257


Отправить сообщение для mr.The с помощью ICQ
По умолчанию

нужно работать с dll как с com объектом (в ней всего 5 функций - одна из них - DllGetClassObject).

это всё конечно хорошо, но разбираться с com слишком долго. есть готовые либы\функции которыми можно загрузить такую dll и юзать её com функции?
 
Ответить с цитированием

  #3403  
Старый 01.08.2009, 23:53
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме:
233095

Репутация: 21
Отправить сообщение для horlyk с помощью ICQ
По умолчанию

Ra$cal, дописал я наконец хедер. Несколько дней напрягался! Посмотри, если не лень и скажи свое мнение по поводу проделанной мною работы
->хедер<-
 
Ответить с цитированием

  #3404  
Старый 02.08.2009, 03:22
Ra$cal
Постоянный
Регистрация: 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..
 
Ответить с цитированием

  #3405  
Старый 02.08.2009, 13:30
horlyk
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме:
233095

Репутация: 21
Отправить сообщение для horlyk с помощью ICQ
По умолчанию

Цитата:
Сообщение от 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..
 
Ответить с цитированием

  #3406  
Старый 02.08.2009, 14:21
razb
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме:
2868783

Репутация: 414


Отправить сообщение для razb с помощью ICQ
По умолчанию

Цитата:
ммм, а указатель разве не меньше памяти требует, если он только передает в другой метод адрес?
При передачи параметров по значению они копируются в стек, в случае с встроенными типами это не так уж критично, указатели стоит использовать при передачи данных больших обьемов (массивы, обьекты (хотя тут лучше ссылки) и т.д.), необходимости возвратить больше одного значения из ф-ции.
 
Ответить с цитированием

  #3407  
Старый 02.08.2009, 15:09
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

Цитата:
Мне просто помнятся слова нашего препода, что если освоить работу с указателями и списками - дальше проблем не будет и что указатели - одно из мощнейших средств с++) Потому и юзал их)
мощные - да. но все надо в меру =) научиться ты научился, теперь тренируйся их разумно использовать =)

Цитата:
ммм, а указатель разве не меньше памяти требует, если он только передает в другой метод адрес, вместо создания нового инта?
фишка в том что указатель на инт и инт занимают по 4 байта на 32 битных машинах. так что никакого выигрыша на встроенных типах. как razb написал это выгодно с объектами, конструктор которых ощутим. например передавать вектора из 10 000 элементов разумнее по ссылке(тот же указатель, только вместо -> пишешь . что гораздо удобнее. читани главу про ссылки, они удобнее указателей =)

Цитата:
Я обычно для проверки делаю так:
это правильно =)
 
Ответить с цитированием

  #3408  
Старый 03.08.2009, 13:31
mr.The
Познавший АНТИЧАТ
Регистрация: 30.04.2007
Сообщений: 1,206
Провел на форуме:
4778940

Репутация: 1257


Отправить сообщение для mr.The с помощью ICQ
По умолчанию

средствами с++ нужно выполнить команду в "командной строке" и получить её результат. как? перенаправление в файл не предлагать.
 
Ответить с цитированием

  #3409  
Старый 03.08.2009, 15:10
__mad
Участник форума
Регистрация: 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;
}
 
Ответить с цитированием

  #3410  
Старый 03.08.2009, 15:16
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

CreateProcess и CreatePipe
А лучше google + непривязываться к языкам програмирования. Потому как API оно и в африке абгдырдыщ.
В Delphi World есть парочку исходников на эту тему:

"Как захватить весь вывод в консоли"
"Запустить консольное приложение и получить его стандартный вывод"
"CreateProcess, который возвращает консольный вывод"

Там оснавная часть кода написана на API по этому переписать на Си не составит труда.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ