Большинство людей не кодирует фактический GUI в Erlang. Более общий подход должен был бы записать уровень GUI в Java или C# и затем говорить с Вашим приложением Erlang через сокет или канал.
, Имея это в виду, Вы, вероятно, хотите изучить различные библиотеки для того, чтобы сделать RPC между Java или.Net приложениями и Erlang:
http://weblogs.asp.net/nleghari/archive/2008/01/08/integrating-net-and-erlang-using-otp-net.aspx
http://www.theserverside.com/tt/articles/article.tss?l=IntegratingJavaandErlang
РЕДАКТИРОВАНИЕ , Если Вы действительно установлены при кодировании интерфейса в erlang, Вы могли бы считать выполнение веб-GUI подаваемым через Отклонения от курса, erlang веб-сервер: http://yaws.hyber.org/appmods.yaws
Синтаксис фигурных скобок действителен для первоначального объявления переменной, но не для присвоения постфактум.
Кроме того, вы возвращаете указатель на автоматическую переменную, которая после возврата больше не распределяется корректно (и будет уничтожена при следующем вызове, например, на print
). Вам нужно сделать что-то вроде этого:
void formatTimeDigits(char strOut[3], int num)
{
strOut[0] = '0' + (num / 10);
strOut[1] = '0' + (num % 10);
strOut[2] = '\0';
}
void serialOutput12()
{
char strOut[3]; // the allocation is in this stack frame, not formatTimeDigits
printWeekday(weekday); // picks the right word to print for the weekday
Serial.print(", "); // a comma after the weekday
Serial.print(hour12, DEC); // the hour, sent to the screen in decimal format
Serial.print(":"); // a colon between the hour and the minute
formatTimeDigits(strOut, minute);
Serial.print(strOut); // the minute
Serial.print(":"); // a colon between the minute and the second
formatTimeDigits(strOut, second);
Serial.print(strOut); // the second
}
В C вы не можете напрямую установить содержимое массива с помощью оператора присваивания =
(вы можете инициализировать массив, но это другое дело, даже если оно выглядит похожим).
Дополнительно:
char (value)
делает то, что вы хотите; и strOut
, вам нужно сделать его статическим сроком хранения. Простой способ сделать то, что вы хотите, - sprintf
:
char * formatTimeDigits (int num)
{
static char strOut[3];
if (num >= 0 && num < 100) {
sprintf(strOut, "%02d", num);
} else {
strcpy(strOut, "XX");
}
return strOut;
}
Пара вещей:
strOut = {'0', (char) num};
Для первой проблемы присвойте элементам массива:
strOut[0] = '0';
strOut[1] = num;
strOut[2] = '\0';
] Для второй проблемы решение немного сложнее. Лучше всего передать строку назначения в функцию FormatTimeDigits ()
и позволить вызывающему абоненту беспокоиться об этом.
FormatTimeDigits(char *destination, int num); /* prototype */
FormatTimeDigits(char *destination, size_t size, int num); /* or another prototype */
Еще один момент по 1-му элементу: возможно, вы видели что-то похожее в ] инициализация . Это отличается от присваивания и позволяет использовать конструкцию, похожую на присваивание.
char strOut[] = {'a', 'b', 'c', '\0'}; /* ok, initialization */
strOut = {'a', 'b', 'c', '\0'}; /* wrong, cannot assign to array */