Вопрос № 58973: Здравствуйте! У меня вопрос по использованию gotoxy()
Код в приложении сырой, но интересует, в принципе, только
void printa(int **matrix, int n, int sx, int sy)
(где sx и sy - координаты начала вывода)
В общем, наплевав на gotoxy(), ...Вопрос № 58995: Уважаемые эксперты, помогите новичку в С.
У меня 2 вопроса:
1.
Есть код:
//////////////
#include <stdio.h>
void main()
{
float i;
float h;
i=50;
h=1/i;
printf("
h = %f
",h);
...Вопрос № 58998: Здравствуйте. У меня такой вопрос. Какие действия надо предпринять, чтобы имя экспортируемой из DLL функции было нормальным, т.е. если есть функция Load, то чтобы она была Load, а не, скажем, Load@@YAHXZ?
Спасибо!...Вопрос № 59005: Доброго времени суток уважаемые эксперты!
Пишу на Visual C++ 6.0 и столкнулся с такой проблемый.
Не пойму как определять указатели на CALLBACK функции определённые в классе, чтобы вызвать например с помощью EnumWindows?
Пример и пояснение...Вопрос № 59014: Здравствуйте, уважаемые эксперты!
У меня довольно громоздкий вопрос.
Дело в том, что класс TThread в С++ Builder очень глючный и поэтому многие склоняются к испольнованию ф-ций API.
Я решил сделать свою реализацию подобного класса, инкапс...Вопрос № 59015: Доброго вечера, господа Эксперты! Суть вопроса: ввести типы enum масть и стоимость. С их помощью описать структуру карта. Сложить и проверить функцию, которая, проверяет, или бёт одна карта другую, с учётом козырной масти. ...
Вопрос № 58.973
Здравствуйте! У меня вопрос по использованию gotoxy()
Код в приложении сырой, но интересует, в принципе, только
void printa(int **matrix, int n, int sx, int sy)
(где sx и sy - координаты начала вывода)
В общем, наплевав на gotoxy(), вывод следующей строки начинается с левого края экрана. Помогитее разобраться, пожалуйста!
1. Вместо printf нужен cprintf
2. В процедуре wnd(4) используется окно большой высоты, Си для ДОС такого сделать не может (13+23) - или меняй видеорежим на 43 или 50 строк или переделывай программу для консоли Виндовс или уменьшь окно.
--------- Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Специалист)
Ответ отправлен: 16.10.2006, 09:11
Вопрос № 58.995
Уважаемые эксперты, помогите новичку в С.
У меня 2 вопроса:
1.
Есть код:
//////////////
#include <stdio.h>
void main()
{
float i;
float h;
i=50;
h=1/i;
printf("
h = %f
",h);
scanf("%f",i);
}
//////////////
Выводит, как и ожидается, что-то вроде 0.020000
Если заменить строку "float i;" на "int i;", то выводит 0.000000
Как сделать, чтобы i оставалась типа int, а программа выводила то, что нужно.
2.
Код:
/////////////
#include <stdio.h>
void main()
{
double eps;
scanf("%f",&eps);
printf("
%f
",eps);
scanf("%f",eps);
}///////////
Вводим, например, 0.001, выводится 0.000000. Как правильно, все таки, записать значение в
переменную eps?
И где, вообще, можно про такого рода вещи в C почитать?
Приложение:
Отправлен: 15.10.2006, 17:34
Вопрос задал: Werebear (статус: 1-ый класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Алексеев В.В.
Здравствуйте, Werebear!
1. Чтобы деление float/int возвращало float, нужно сначала int преобразовать к float. Тогда:
int i=50;
float h;
h=1/(float)i;
2. У вас несовпадение типов. Если хотите использовать %f - то ставьте везде float, если нужен double то ставится %lf.
Тогда:
double eps;
scanf("%lf",&eps);
printf("
%lf
",eps);
У меня (gcc) привело к ожидаемым результатам. На борланде не проверял, но ИМХО там тоже самое.
Ответ отправил: Алексеев В.В. (статус: 1-ый класс)
Ответ отправлен: 15.10.2006, 18:01 Оценка за ответ: 5 Комментарий оценки: Спасибо, помогло.
Отвечает: UnRe@l
Здравствуйте, Werebear!
На второй вопрос:
// Win32 Console Application.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
Проще использовать потоковый ввод-вывод. Узнать о нём можно, например, здесь http://rsdn.ru/.
Удачи!
--------- Cogito, ergo sum (c) R. Descartes (1596-1650)
Ответ отправил: UnRe@l (статус: 1-ый класс)
Ответ отправлен: 16.10.2006, 07:11 Оценка за ответ: 3 Комментарий оценки: Ну да - проще. Но мне надо управиться именно через scanf & printf. Задание такое.
Вопрос № 58.998
Здравствуйте. У меня такой вопрос. Какие действия надо предпринять, чтобы имя экспортируемой из DLL функции было нормальным, т.е. если есть функция Load, то чтобы она была Load, а не, скажем, Load@@YAHXZ?
Спасибо!
Отправлен: 15.10.2006, 18:00
Вопрос задал: Azemtsov (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Vaga
Здравствуйте, Azemtsov!
Необходим .def файл примерно следующего содержания:
LIBRARY MyDll
EXPORTS
Load = Load@@YAHXZ PRIVATE
--------- Ошибка становится ошибкой, когда рождается как истина. Станислав Ежи Лец
Ответ отправил: Vaga (статус: 4-ый класс)
Ответ отправлен: 15.10.2006, 19:35
Отвечает: dentist
Здравствуйте, Azemtsov!
не совсем понятно в чём проблема и вы не указали как на данный момент объявляются экспортируемые функции и в какой среде вы работаете.
однако принято, экспорт делать так (MSVC++):
в модуле:
extern "C" __declpsec(dllexport) ... Load(...) {...};
в include-файле:
#if defined(__cplusplus)
extern "C" {
#endif
... Load(...);
#if defined(__cplusplus)
} // extern "C"
#endif
далее к проекту использующему эту библиотеку подключаете автоматически созданый .lib и header-файл.
--------- "Software is like sex, it's better then it's free" (c) Linus Torvalds
Ответ отправил: dentist (статус: 5-ый класс)
Ответ отправлен: 16.10.2006, 09:45
Вопрос № 59.005
Доброго времени суток уважаемые эксперты!
Пишу на Visual C++ 6.0 и столкнулся с такой проблемый.
Не пойму как определять указатели на CALLBACK функции определённые в классе, чтобы вызвать например с помощью EnumWindows?
Пример и пояснение в приложении(программа консольная).
Приложение:
Отправлен: 15.10.2006, 19:11
Вопрос задал: Link (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Bob Johnson
Здравствуйте, Link!
никак. callback функция не должна быть членом класса.
но решение существует - любой callback функции передается пользовательское число, которое вполне может быть указателем на класс, т.е. она сможет вызвать нужный его метод, а начальную callback функцию можно тоже определить в классе, но как static.
class myclass
{
...
static BOOL CALLBACK EWndProc (HWND h, LPARAM id)
{
return ((myclass*)id)->EWndProcNonStatic (h);
}
BOOL EWndProcNonStatic (HWND h);
}
...
EnumWindows (&EWndProc, (LPARAM)this);
Ответ отправил: Bob Johnson (статус: Академик) Россия, Калуга WWW:Программирование ---- Ответ отправлен: 15.10.2006, 21:42 Оценка за ответ: 5
Вопрос № 59.014
Здравствуйте, уважаемые эксперты!
У меня довольно громоздкий вопрос.
Дело в том, что класс TThread в С++ Builder очень глючный и поэтому многие склоняются к испольнованию ф-ций API.
Я решил сделать свою реализацию подобного класса, инкапсулирующего API-вызовы, и сразу столкнулся с проблемой:
Я хочу в качестве поточной ф-ции вызывать один из методов моего класса, но компилятор выдает ошибку - нельзя присваивать адрес метода класса, можно только если он объявлен как static, но это не годится, я хочу обращаться внутри этого метода к любым членам класса (а не конкретного экземляра класса).
Как с этим бороться?
Приложение:
Отправлен: 15.10.2006, 20:28
Вопрос задал: Evkwarrior (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Tek
Здравствуйте, Evkwarrior!
Можно например описать какую-нибудь глобальную функцию TreadProc() и объявить ее же со спецификатором friend в классе CLASS_THREAD_CS
Либо - поскольку это решение лично мне всегда казалось на оченно красивым, то можно из этой глобальной функции TreadProc() вызывать public-метод ThreadProcedure нужного объекта класса. А для этого в TreadProc - передавать указатель на конкретный объект.
Правда в обоих случаях получается введение глобальной функции.
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано
Ответ отправил: Tek (статус: 1-ый класс)
Ответ отправлен: 16.10.2006, 09:16 Оценка за ответ: 4 Комментарий оценки: "Правда в обоих случаях получается введение глобальной функции"
Отвечает: Bob Johnson
Здравствуйте, Evkwarrior!
Опиши функцию старта потока как static метод класса. При запуске потока в качестве user-defined параметра передавай this класса, а в функции через тайпкаст параметра к типу твоего класса вызывай уже любой другой метод.
Ответ отправил: Bob Johnson (статус: Академик) Россия, Калуга WWW:Программирование ---- Ответ отправлен: 16.10.2006, 18:37 Оценка за ответ: 4 Комментарий оценки: Неужели никак нельзя обойтись без внешних
функций?
Вопрос № 59.015
Доброго вечера, господа Эксперты! Суть вопроса: ввести типы enum масть и стоимость. С их помощью описать структуру карта. Сложить и проверить функцию, которая, проверяет, или бёт одна карта другую, с учётом козырной масти.
Отправлен: 15.10.2006, 21:02
Вопрос задал: Petrov (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: NextStep / www2
Здравствуйте, Petrov!
Не знаю как у Вас с английским, потому идентификаторы типов, структур, переменных и функций пишу по-русски транслитом.
Приложение:
--------- Нет правил без исключений, правило без исключения - это исключение из правил.
Ответ отправил: NextStep / www2 (статус: Студент)
Ответ отправлен: 16.10.2006, 06:38