Форум » [x]Harbour » Помогите с С если есть возможность » Ответить

Помогите с С если есть возможность

finder: bufferget( @<cRead>) --> <nCount> типа такого должно вызываться в харборе PHB_ITEM pRead = hb_param( 1, HB_IT_BYREF ); наверное так принимается параметр int num; do { char buffer[0x2000]; num = buffer_read(input, buffer, sizeof(buffer) ); if(num > 0) { int i; count += num; fprintf(stderr, "read:\n"); for( i = 0; i < num; ++i ) fputc( buffer , stderr ); fprintf(stderr, "\n"); } } while(num > 0); как сложить в переменную то, что идет в stderr и вернуть по ссылке? сколько упадет тоже заранее неизвестно оно выдается порциями в сях не силен, могу только по образу и подобию смастерить, но что-то подходящего примера не нашел (

Ответов - 9

Pasha: Для строки надо выделять память: char * szRet = hb_xgrab( ulLen ); увеличить размер строки: szRet = hb_xrealloc( szRet, ulNewLen ); Принять 1-й параметр: char * szStr = hb_parc( 1 ); Вернуть 1-й параметр по ссылке (освобождать память не надо): if( HB_ISBYREF( 1 ) ) hb_storclen_buffer( szRet, ulLen, 1); освободить память (если параметр не по ссылке): hb_xfree( szRet ); PS В операциях выделения памяти к длине надо добавлять +1, для нулевого байта

SergKis: finder Может эти ф-ии подойдут http://www.kresin.ru/hrbfaq_3.html#Doc13_4

Oskar_AAA: Добрый день, коллеги. Возможно не в этой теме, но вопрос касается C++. Скачал xharbour 10261 +BCC 73064. Как настроить и использовать возможности x64? Сейчас проект крутиться на xHarbour 1.2.3 Intl. (SimpLex) (Build 20200311) и Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland


alkresin: Oskar_AAA пишет: Как настроить и использовать возможности x64? Гм... Да нет никаких особых возможностей x64. Большее адресуемое пространство, больше возможный размер строк, ну и т.п. Настроек вроде специальных не требуется. Я на Windows x64 не собирал, а на Linux - все как обычно.

MIKHAIL: воспользовался кодом А.Кресина SELECTFILE() HB_FUNC( SELECTFILE ) { //выбор файла winAPI OPENFILENAME ofn; char buffer[512]; char *strFilter; char *str1 = hb_parc( 1 ); char *str2 = hb_parc( 2 ); char *initDir = hb_pcount()>2 ? hb_parc(3):NULL; char *cTitle = hb_pcount()>3 ? hb_parc(4):NULL; выделенные строки дают предупреждение при компиляции: Warning W8075 d:\\magazin\\magazin.prg 16298: Suspicious pointer conversion in function HB_FUN_SELECTFILE Warning W8075 d:\\magazin\\magazin.prg 16299: Suspicious pointer conversion in function HB_FUN_SELECTFILE Warning W8075 d:\\magazin\\magazin.prg 16300: Suspicious pointer conversion in function HB_FUN_SELECTFILE Warning W8075 d:\\magazin\\magazin.prg 16301: Suspicious pointer conversion in function HB_FUN_SELECTFILE Что нужно поправить ? Код отрабатывает нормально

alkresin: Поставьте перед всеми hb_parc() (char*): char *str1 = (char*) hb_parc( 1 ); hb_parc() возвращает const char*, поэтому нужно преобразование типов, чтобы не было предупреждений - хотя эти предупреждения не критичны.

MIKHAIL: MIKHAIL пишет: воспользовался кодом А.Кресина SELECTFILE() заметил что после отработки этой функции перестает работать KBDSTAT(), что то в коде на С видимо нужно поправить...

alkresin: В коде hwg_selectfile() нет ничего, что непосредственно могло бы иметь отношение к kbdstat(). Думаю, проблема как-то связана с тем, что стандартный GUI диалог вызывается из приложения, сделанного на одном из gt (gtwvt, ...) и, таким образом, обработка ввода с клавиатуры прерывается. Тут поэкспериментировать надо. Может kbdstat() опять начинает работать после каких-то операций ввода/вывода средствами gt.

MIKHAIL: alkresin пишет: Может kbdstat() опять начинает работать после каких-то операций ввода/вывода средствами gt. заменил kbdstat() на GetAsyncKeyState()



полная версия страницы