Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: FerzCH
Дата сообщения: 26.02.2008 22:55
distance
Заменила
typedef struct { double x, y, z;} TPoint;
на
struct TPoint{double x, y, z;};

выдает ошибку:
redefinition of 'struct TPoint'
previous definition of 'struct TPoint'
Автор: sash29
Дата сообщения: 02.03.2008 18:56
всем привет может кто встречал где нибудь такую тему - есть 500 абонентов(условно) нужно всем отправить одну СМСку из компа через мобилку(не через Call Center где задержка может быть от 2мин. - до 3часов а именно как СМС из мобильника на мобильник) - кто что сможет подсказать, или хотябы где искать и что. сам работаю с С++не профи, но что то писать могу... или на адрес sash29@ukr.net

если кто что подскажет - зараннее большое спасибо...
Автор: Antananarivu
Дата сообщения: 06.03.2008 09:58
Здравствуйте!
Проблема такая.
Отработала программа, получил кучу данных, по старинке делаю fprintf в файл, рисую вручную таблички. В общем, трачу впустую время. Гораздо эстетичнее, да и практичнее, было бы экспортировать полученные данные в Excel и уже оттуда печатать нормальные таблицы, а может быть даже сразу получать графики, гистограммы и прочее.
Вопрос самый общий: где об этом можно почитать? Как это реализовать?
Заранее огромное спасибо!
Автор: akaGM
Дата сообщения: 06.03.2008 11:57
Antananarivu

Цитата:
по старинке делаю fprintf в файл

самое простое, чтобы сделал я в первую очередь, -- это писал бы той же fprintf() все значения через запятую, и выходной файл обозвал бы "мой_файл_что-то_там.csv"
вообще одним кликом вгоняется в Ексель...
Автор: Antananarivu
Дата сообщения: 06.03.2008 13:31
akaGM
Спасибо!
С одной стороны это удобно! Но.. в то же время, открывая затем этот файл в Екселе, вижу что еще полчаса придется потратить на форматирование. Целые числа выравнены по левому краю, остальные по правому, столбцы надо потом вручную выравнивать по ширине и т.д
Нет какого-нибудь метода, как всего этого избежать?
Автор: akaGM
Дата сообщения: 06.03.2008 13:53
Antananarivu
ну не знаю...
попробуй в fprintf-e c "%-d %-g" поиграть...

в Екселе же это только для тебя на экране так представлено,
что ты дальше с ними будешь делать от тебя и зависит...
я вообще Ексель не знаю...
сторонных библиотек для форматного импорта/экспорта до чёрта всяких-разных
если ты на Билдере сидишь, то глянь, например, вот на это:

http://www.sqlmanager.net/ adv data export/import
Автор: Antananarivu
Дата сообщения: 06.03.2008 14:03
Да нет, я как раз на Visual C++ сижу.
Лазил по нету, находил либо длинные статьи, либо инструкции для билдера. А разбираться особенно времени нет.
Было бы круто найти где-нибудь алгоритм прямой записи переменной в ячейку xls файла, также возможность средствами C++ поиграть с выравниванием, размером шрифта, заливкой, обрамлением и т.д. и т.п.
Скажем небольшой кусочек кода, который бы:
а) занес переменную x в ячейку А1 созданного файла А1.xls.
б) выровнял бы содержимое ячейки по левому краю.
в) сделал бы автоподбор ширины столбца.
г) нарисовал бы границу этой ячейки.
д) увеличил бы шрифт до 14
Visual C++ 6.0, 2003 офис.
Если бы кто-то написал кусочек такого кода, дальше,надеюсь, я бы и сам разобрался.
Заранее спасибо.
P.S. И не подумайте что я с жиру бешусь, просто тот человек который будет этой программой пользоваться, кроме как открыть Excel и ткнуть на печать не умеет больше НИЧЕГО! Поэтому мне и надо, чтобы после отработки программы, был сформированный Excel файл со всем нужным форматированием.
Автор: KChernov
Дата сообщения: 07.03.2008 10:20
Antananarivu
А чем OLE Automation не подходит?

Вот навскидку поиск по "ole automation c++" на Яндексе.
Во второй строчке есть ссылка на статью в ВиКи - http://en.wikipedia.org/wiki/OLE_Automation .

Ну а примеров на других языках на эту темы можно найти ну очень много (в том числе и для екселя) - всякие wsh-скрипты, например.
Автор: Antananarivu
Дата сообщения: 14.03.2008 16:02
В продолжение вопроса о работе с Экселем из под С++:
Изучаю COM-объекты.
Получилось создать график, но вот с подписями осей ничего не выходит.
Код:

Код:
RangePtr pRange = sheet->Range["A2:C8"];
_ChartPtr pChart = book->Charts->Add();
pChart->ChartWizard((Range*) pRange, (long) xl3DColumn , 4L, (long) xlColumns, 1L, 0L, 1L, "График");
??? pChart->Axes(xlValue, xlPrimary)->HasTitle[0] = true;
??? pChart->Axes(xlValue, xlPrimary)->AxisTitle->Characters->Text = "Подпись оси"
Автор: terminat0r
Дата сообщения: 14.03.2008 16:52
Antananarivu
Бери Эксель, запускай запись макроса, строй свой график.
Потом смотри макрос, и делай реализацию.
Или запиши макрос в файл а с программы просто запускай с помощью оле свой макрос.
Иерархию в экселе тоже очень удобно смотреть в редакторе макросов. Там все есть.
Автор: Antananarivu
Дата сообщения: 14.03.2008 16:55
Так я так и делал, брал код из VBA и творчески переделывал его в Visual С++, но вот с этим делом разобраться не смог.
Так что прошу помочь, именно с теми 2 строками, которые отмечены ???
Автор: Antananarivu
Дата сообщения: 14.03.2008 23:46
Так.. посмотрел повнимательнее, почитал кое где, это делается как-то через Invoke. То есть видимо, должно быть как-то

Код:
pChart->Axes(xlValue, xlPrimary)->Invoke... и что-то еще
Автор: Talkman
Дата сообщения: 16.03.2008 16:18
А почему не срабатывает casting: unsigned
в данном случае:


Код:

#include <stdio.h>

int main(int argc, char *argv[])
{
int a = -100,b;
b = (unsigned)a;
printf("%d", b);
getchar();
return 0;
}

Автор: DW
Дата сообщения: 16.03.2008 22:56
Talkman

я думаю, что casting срабатывает два раза в этом случае. Один раз явно, "(unsigned)a", а второй раз неявно, когда просиходит присваение к b, т.к b это не unsigned,a int.
Автор: c0d3r
Дата сообщения: 17.03.2008 08:00

Цитата:
А почему не срабатывает casting: unsigned


В printf() используйте %u, вместо %d.
Автор: Antananarivu
Дата сообщения: 17.03.2008 17:18
Последняя попытка...
Как я уже говорил выше, такие действия как редактирование легенды или осей координат осуществляются при помощи функции Invoke. Я нашел как реализован вывод легенды:

Код:
IDispatchPtr pDisp = pChart->SeriesCollection(_variant_t((long)1L));
HRESULT hr;
DISPID dispid;
OLECHAR* szMember = OLESTR("Name");
hr = pDisp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
if(SUCCEEDED(hr))
{
VARIANT varg[1];
    varg[0].vt = VT_BSTR;
    varg[0].bstrVal = _bstr_t(OLESTR("=\"График 1 \""));
    DISPID dispidPut = DISPID_PROPERTYPUT;    
    DISPPARAMS dp;
    dp.cArgs = 1;
    dp.rgvarg = varg;
    dp.rgdispidNamedArgs = &dispidPut;
    dp.cNamedArgs = 1;
hr = pDisp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT,DISPATCH_PROPERTYPUT,&dp, NULL, NULL, NULL);
}
Автор: JArik
Дата сообщения: 18.03.2008 03:08
Кто нибудь знает как можно получить hostname дефултовского прокси на компе используя тока Вин АПИ ?
Уже весь мсдн перерыл ничего не нашел... WinHttp был какой то, но у меня таких библиотек нет(VC++ 2005). Через InternetQueryOption пробовал, он почему то постоянно выдает одно и то же - что соединине прямое, даже если я прокси устанавливаю везде.
Вот то что пробую сейчас и не пашет:

Код:

INTERNET_PROXY_INFO * proxyInfo = new INTERNET_PROXY_INFO;
memset(proxyInfo, 0, sizeof(*proxyInfo));
DWORD dwSize = sizeof(INTERNET_PROXY_INFO);

InternetQueryOption(NULL,
INTERNET_OPTION_PROXY,
proxyInfo, &dwSize );
if(proxyInfo->dwAccessType == INTERNET_OPEN_TYPE_PROXY)
{
strcpy(proxy,proxyInfo->lpszProxy);
}
Автор: terminat0r
Дата сообщения: 18.03.2008 11:40
Antananarivu

Цитата:
Так я так и делал, брал код из VBA и творчески переделывал его в Visual С++


Я не знаю специфики Visual C++. Я это делал много раз, но в БСБ. Если не получается, то тебе надо просто записать макрос в файл, а потом программно запустить этот макрос и не заморачиваться.
Только имхо стрить графики в екселе- это извращение еще то.
Автор: Yandersen
Дата сообщения: 22.03.2008 16:28
Я новичёг, пришёл с таким вопросом: мне нужно, чтобы по нажатии некоторой кнопки на форме всё текстовое содержимое из Edit'а скопировалось в стандартный Виндусовский буфер обмена. Ну, чтобы юзер мог потом вставить его в, к примеру, блокнот стандартным способом (CTRL+V). Как это можно реализовать? Есть ли простые функции для такой операции копирования в буфер обмена?
З.Ы.: я в ВСВ 6 работаю.
Автор: blaro
Дата сообщения: 22.03.2008 18:56
Люди, помогите чайнику! У меня есть несколько вопросов. Они дрврльно пустяковые, но для начинающего програмиста могут быть жизнено важные.
1) Как двигаться вперед(назад) по массиву не используя индекс, а используя только указатели на них? То есть как написать цикл for() без индексов? И как занести в него данные?
2) Второй вопрос такой же как и первый, только речь идет о буквенных массивах.
3)Как задать многомерный массив через функцию malloc()?
Зарание спасибо.
Автор: vvkot
Дата сообщения: 22.03.2008 19:51
Помогите решить проблему (за вознаграждение).

Есть библиотека. Исходников нет. К проектам для пятого CBuildera подключается без проблем.

При попытке слинковать с проектами в последующих версиях CBuildera
(6, BDS2006) выдает следующую ошибку:

Build
[linker Error] Unresolved external '__fastcall Windows::PointToSmallPoint(const Windows::TPoint&)' referenced from C:\MYLIB.LIB|StdCtrls
[linker Error] Unresolved external '__fastcall Windows::SmallPointToPoint(const Windows::TSmallPoint)' referenced from C:\MYLIB.LIB|StdCtrls

По всей видимости связано с тем, что TPoint в шестом билдере лежит в другом namespace. Сами функции (я думаю) описаны в windows.pas:

function SmallPointToPoint(const P: TSmallPoint): TPoint;
begin
Result.X := P.X;
Result.Y := P.Y;
end;

function PointToSmallPoint(const P: TPoint): TSmallPoint;
begin
Result.X := P.X;
Result.Y := P.Y;
end;

Пытался сформировать модуль и подключить к проекту, чтобы перекрыть недостающие ссылки, но никак не удается (Вместо Windows::TSmallPoint получается просто TSmallPoint и т.д.). Как сформировать модуль и подключить его к проекту, чтобы исчезли Unresolved external.

Могу выслать LIB. Кто реально поможет, готов выставить ящик пива.

Пишите v v k o t @ r a m b l e r . r u
Автор: akaGM
Дата сообщения: 22.03.2008 21:11
vvkot
как варианты:

1)
растащи свою либу mylib.lib на объектники, выясни где там зовутся эти функи и подсунь им свои и пересобери библиотеку...

2)
сделай тоже самое как и в п.1), а потом перебей в бинарнике имена/вызовы, типа
PointToSmallPoint --> PointToSmallPoin_
SmallPointToPoint --> SmallPointToPoint_

подсунь свои и слинкуй...
Автор: vvkot
Дата сообщения: 22.03.2008 23:16
А чем либу "растащить" на объекктники??? Я об этом думал, в принципе эти функции можно вообще выкинуть, но чем это сделать??? Имена в бинарнике я менять пробовал, на как убрать приставку windows:: не просек. Подсовываю свой модуль с этими функциями, а он их все равно не признает за то, что ему нужно.
Автор: akaGM
Дата сообщения: 22.03.2008 23:32
vvkot
Цитата:
А чем либу "растащить" на объекктники???

чем, чем...
lib.exe конечно...
Автор: c0d3r
Дата сообщения: 22.03.2008 23:53
Советую вам прочитать про указатели, чтобы разобраться самому.


Цитата:
1) Как двигаться вперед(назад) по массиву не используя индекс, а используя только указатели на них? То есть как написать цикл for() без индексов?


char array[SIZE];
char *p = array;

После этого:
- p++ сдвинет вас не следующий элемент массива
- p-- сдвинет вас на предыдущих элемент массива
- *p вернёт содержимое текущего элемента


Цитата:
И как занести в него данные?


*p = 'x';


Цитата:
2) Второй вопрос такой же как и первый, только речь идет о буквенных массивах.


Нет разницы какой тип имеют элементы массива. Работа с указателями везде одинаковая.


Цитата:
3)Как задать многомерный массив через функцию malloc()?


char *ptr = (char)malloc(10);

Теперь ptr указывает на строку из 10 символов. НО! Тут вам не Си, а С++. В нём лучше выделять память с помощью оператора new:

char *ptr = new char[10];

Не забудьте про free()/delete после...
Автор: akaGM
Дата сообщения: 23.03.2008 13:36
c0d3r

Цитата:
Советую вам прочитать про указатели, чтобы разобраться самому.

обязательно...

вот видишь, что получается, если не придерживаться принятого формата постинга...
Автор: blaro
Дата сообщения: 23.03.2008 14:24
Да я уже чего только не читал. Кроме того я же учусь в колледже, а эту тему я не очень-то хорошо понял. И ещё, я пишу на Си а не на СИ++. Но все равно спасибо за помощь.
Автор: akaGM
Дата сообщения: 23.03.2008 16:53
что мне посоветует уважаемый All почитать по шаблонам?
самое простое и не очень подробное (без тонкостей)
(С знаю, С++ -- оч. плохо)

(электронное + бумажное)

2 Qraizer
видишь, созрел и не в последнюю очередь благодаря тебе...
Автор: distance
Дата сообщения: 23.03.2008 18:19
akaGM

Цитата:
что мне посоветует уважаемый All почитать по шаблонам?

Шаблоны C++: справочник разработчика
Автор: akaGM
Дата сообщения: 23.03.2008 19:57
distance
о! отлично, уже даже скачал оригинал с примерами...
мы тебе доверяем, спасибо...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.