Открыто ли окно консоли, и я говорю с ним? C ++ / C #, Windows и Linux - PullRequest
1 голос
/ 18 августа 2011

Я разрабатывал встроенное приложение C ++ в виде DLL / SO ("C" externed), которое работает в Linux (Ubuntu 11.04) и Windows (XP).Таким образом, я понятия не имею, работает ли в моем приложении вызывающего абонента графический интерфейс, консоль или нет.Я полагаю, что stdout и stderr указывают на область битов, когда к ним не подключена консоль, поэтому просто запись в cout или cerr безвредна, хотя мне интересно, находится ли вывод буквально в каком-то месте в пространстве подкачки файла подкачки / файла подкачки.1002 * Таким образом, моя текущая мысль состоит в том, чтобы программа-вызывающая программа дала мне функцию обратного вызова (адрес) и чтобы эта функция выглядела как (void) (*) (void *), где (void *) указывает на четко определенную структуру впрограмма вызывающего абонента, где я могу написать ошибку / статус / любую информацию.Я делал подобные вещи раньше в C и C ++, но я знаю, что у меня будет хотя бы один вызывающий C #.Может ли C # передать мне такой обратный звонок?Будут ли какие-либо трудности для него / меня, чтобы прочитать данные, которые мог бы написать другой?

С другой стороны, я мог бы открыть консоль и записать в нее сообщения.Может кто-нибудь сказать мне, как это сделать?

Я посмотрел на всплывающее окно с сообщениями в Windows, и это ужасная вещь.Не смотрел на Linux.У кого-то есть примеры, использующие char * или std :: strings, а не типы данных what-thet-are, требуемые для окон?

FWIW, наша архитектура говорит, что нет файлов, нет общей памяти, нет именованных каналов и нет сокетов для сообщенийпрохождение.И, помня, что как программа я понятия не имею о доступных для записи местах файлов, я все равно не смог надежно записать файл.Так же, как и я, некоторые sys op отключали бы пользовательские записи, куда бы я ни выбрал.Я должен зависеть от того, как пользователь передаст мне доступный путь к файлу и имя файла.

Может кто-нибудь прокомментировать мою ситуацию и идеи?

Большое спасибо,

Уэс

КОММЕНТАРИЙ: f Я правильно понимаю, вы находите подходящий способ для записи сообщения об ошибке / состоянии / отладке из библиотеки C ++ DLL?И так как вы не знаете тип DLL-потребителя (консоль C / C ++, C # GUI, ..), вы не уверены, можно ли писать в stdout?- m3rLinEz 1 час назад

Ну, не совсем так.Я хочу подтвердить, что запись в sdtout / stderr при отсутствии консоли отправляет вывод в никуда и что он не раздувает файл подкачки.Я предполагаю, что это означает, что можно писать на стандартный вывод независимо от моего потребителя.

Что это на самом деле означает, можете ли вы указать мне пример кода, который я могу использовать для демонстрации присоединения extern-библиотеки "C" к программе на C # и чтобы программа настроила обратный вызов и переменную / структуру /и т.п.и передать их адреса в DLL, которая затем может записать данные в var / struct / etc.и перезвонить.W.

...