… написал письмо программисту, написавшему SV mapper, сегодня получил ответ:
«Качайте DirectX SDK и там смотрите раздел по DirectInput.
В частности, потребуется управляться с интерфейсом IDirectInputDevice8.
Опрашивайте кнопки — либо буферизованно (IDirectInputDevice8::GetDeviceData) — тогда будете знать, что за чем нажато, либо напрямки (IDirectInputDevice8::GetDeviceState), тогда отслеживать изменение состояния придется самостоятельно…»
Взял учебный пример из DirectX SDK, скомпилировал… Запустил приложение и убедился в том, что видны все кнопки!!!!
Отсюда вывод: simconnect имеет ограничение 32 кнопки при опросе джоя, DX не имеет…
Следовательно нужно просто опрашивать джой через SDK, команды в сим подавать через simconnect.
Valery-B
12.03.2008 в 19:04
imitator (12.03.2008 22:54) писал:
… написал письмо программисту, написавшему SV mapper, сегодня получил ответ:
«Качайте DirectX SDK и там смотрите раздел по DirectInput.
В частности, потребуется управляться с интерфейсом IDirectInputDevice8.
Опрашивайте кнопки — либо буферизованно (IDirectInputDevice8::GetDeviceData) — тогда будете знать, что за чем нажато, либо напрямки (IDirectInputDevice8::GetDeviceState), тогда отслеживать изменение состояния придется самостоятельно…»
Взял учебный пример из DirectX SDK, скомпилировал… Запустил приложение и убедился в том, что видны все кнопки!!!!
Отсюда вывод: simconnect имеет ограничение 32 кнопки при опросе джоя, DX не имеет…
Следовательно нужно просто опрашивать джой через SDK, команды в сим подавать через simconnect.
Копался я в этих примерах. Самое, на сколько я понял сложное — это найти все имеющиеся джойстики, и все, что у них имеется. В учебнике DirectX SDK это шаг №1 Выполняется как-то так:
//g_pDI is an initialized pointer to IDirectInput8
g_pDI->EnumDevices(DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback,
NULL, DIEDFL_ATTACHEDONLY)
А вот потом в функции EnumJoysticksCallback
BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE*
pdidInstance, VOID* pContext)
{
HRESULT hr;
// Obtain an interface to the enumerated joystick.
hr = g_pDI->CreateDevice(pdidInstance->guidInstance,
&g_pJoystick, NULL);
if(FAILED(hr))
return DIENUM_CONTINUE;
return DIENUM_STOP;
В функции должно быть описано создание устройства и что делать с каждым найденным джойстиком, а вот как раз этому в примерах уделено очень мало (почти ничего). Там ищется первый джойстик и все заканчивается.
Lavrik
12.03.2008 в 20:07
Совет — скачайте любую обертку под ДиректИнпутные дела и все.
К примеру — от одна из них. Весь необходимый сурс + екзампл. В экзампле для примера показана работа только с первым джоем, работа с остальными (если есть конечно) — аналогично. У меня все работает. Не забудьте подключить директинпутный либ.
Совет — скачайте любую обертку под ДиректИнпутные дела и все.
К примеру — от одна из них. Весь необходимый сурс + екзампл. В экзампле для примера показана работа только с первым джоем, работа с остальными (если есть конечно) — аналогично. У меня все работает. Не забудьте подключить директинпутный либ.
спасибо, этот пример тоже работает, теперь прийдется за книжки сесть, язык ковырять…
в любом случае уже виден свет в конце тоннеля
Valery-B
13.03.2008 в 18:15
Lavrik (13.03.2008 01:07) писал:
Совет — скачайте любую обертку под ДиректИнпутные дела и все.
К примеру — от одна из них. Весь необходимый сурс + екзампл. В экзампле для примера показана работа только с первым джоем, работа с остальными (если есть конечно) — аналогично. У меня все работает. Не забудьте подключить директинпутный либ.
Огромное спасибо за ссылку. На ее основе содержащегося там кода уже удалось сварганить простейший GAU-прибор, реагирующий на нажатие кнопок двух моих джойстиков.
Guest
15.03.2008 в 19:02
Си — это жесть ! Там пока с синтаксисом разберешся — треснет голова. По этому остановился на дельфях. Вы должны знать что под любую визуальную среду программирования существует так называемый OCX компонент симконнета который устанавливается в винду и виден из под VB6 или Delphi Studio или Визуал СИ. Программировать такой компонент одно удовольствие и сам процесс сводится не к программированию заголовоков симконнекта а к реализации самой идеи программы. Компонент проверен в боях и на нем сделано немало утилит. Вобщем если кому нужно — спрашивайте прямо тут.
imitator
15.03.2008 в 20:39
Flyrus (15.03.2008 21:02) писал:
Си — это жесть ! Там пока с синтаксисом разберешся — треснет голова. По этому остановился на дельфях. Вы должны знать что под любую визуальную среду программирования существует так называемый OCX компонент симконнета который устанавливается в винду и виден из под VB6 или Delphi Studio или Визуал СИ. Программировать такой компонент одно удовольствие и сам процесс сводится не к программированию заголовоков симконнекта а к реализации самой идеи программы. Компонент проверен в боях и на нем сделано немало утилит. Вобщем если кому нужно — спрашивайте прямо тут.
… с С++ еще туда сюда, а вот с simconnect’ом… Нажатия кнопок вижу, а вот как это преобразовать в команду для симконнекта…. Тоесть команды там по Евенту должны срабатывать, но поскольку опрос джоя не на симконнекте — ессно события не возникают. Ника не соображу как сформировать событие, чтоб симконнект их увидел и послал в сим…
Guest
16.03.2008 в 12:37
У тебя визуал студио ? Проверь. Если ты сможеж импортировать OCX компоеннеты которых в системе просто валом — то я тебе дам этот компонент. и примеры работы с переменными и евентами..
имконенкт это несколько большее чем ты себе представляеш ! То о чем сейчас говориш — это такой маленькая песчинка на фоне просто огромных возможностей симмконнекта.
Я пользуюсь только визуальной средой и не испытываю проблем с программированием симконнекта:
Вобщем тут всё уже давно забито все заголовки.. Просто остаетяс работать с ним и всё..
FortRoss
16.03.2008 в 13:11
под C++ и/или любым .NET-языком (C#, Visual Basic.NET, J#) никаких дополнительных переходников в виде OCX (это вообще позапрошлый век) не требуется
формирование событий — функция SimConnect_TransmitClientEvent. Посылать может как и встроенные эвенты сима, так и кастомные, специфичные для конкретной модели эвенты
PS работая из-под Visual C++ с коннектом, использовать еще какие-то дополнительные модули — называется «достать до гланд через задницу».
imitator
16.03.2008 в 14:57
FortRoss (16.03.2008 15:11) писал:
под C++ и/или любым .NET-языком (C#, Visual Basic.NET, J#) никаких дополнительных переходников в виде OCX (это вообще позапрошлый век) не требуется
формирование событий — функция SimConnect_TransmitClientEvent. Посылать может как и встроенные эвенты сима, так и кастомные, специфичные для конкретной модели эвенты
PS работая из-под Visual C++ с коннектом, использовать еще какие-то дополнительные модули — называется «достать до гланд через задницу».
блин, я эту хрень и искал (SimConnect_TransmitClientEvent) Чтоб найти пол дня убил…. Но уже запустил и работает, правда столкнулся с интересным явлением: кнопки с большими номерами отрабатывают одно нажатие, с малыми — до пяти — шести раз… пришлось задержки ставить принудительно, вроде бы победил.
Guest
16.03.2008 в 16:47
FortRoss (16.03.2008 18:11) писал:
под C++ и/или любым .NET-языком (C#, Visual Basic.NET, J#) никаких дополнительных переходников в виде OCX (это вообще позапрошлый век) не требуется
формирование событий — функция SimConnect_TransmitClientEvent. Посылать может как и встроенные эвенты сима, так и кастомные, специфичные для конкретной модели эвенты
PS работая из-под Visual C++ с коннектом, использовать еще какие-то дополнительные модули — называется «достать до гланд через задницу».
дело не в этом. Вся проблема для начинающих и НЕ НАЧИНАЮЩИХ программеров в том что часть примеров из собственно го же SDK по симконнекту не пашет !
Как организовать передачу данных практически нигде не описана. Существует четкая последовательность действий состоящая из 3-х строк которая заставляет работать с переменными , модифицировать их и принимать. В SDK это всё описано но не явно. Нет четкого описания действий для того чтобы ….
1. Принимать данные с переменных
2. Педавать данные переменным
3. Передавать евенты
4. передавать ементам параметры.
Им нужно было пунк за пунктом с комментариями напротив каждой строки привести примеры . Примеры есть , но я лично запутался в описниях функций и суть до конца не понял , пока не увидел напримере этого OCX как же в реале организуется связь с симконнектом.
Следующее препятствие — всё на аглийском языке с использованием специфических терминов.
Разберется только подготовленный и опытный программер за плечами которого не один десяток релизов софта… У меня нет десятка релизов.. Но я разобрался. Если изучать исходники чужих прмеров , то непрофессионал легко запутается в описании заголовков и функций , и толком не поймет какжде работает этот симконнект. Этот OCX прошлый век , но он дает наглядное предсьтавление как же пашет это всё — тоесть саму логику. Например все начинающие программить симконнект считают что воздействие на перменную выглядит примерно так —
ИМЯ_ПЕРЕМЕННОЙ=величина. Или обратно : Величина=ИМЯ_ПРЕМЕННОЙ и пытаются заставить работать симконнект от таких вот строк. Что такое группы , приоритеты — это уже потустронний непонятный мир симконнекта.
Как тока сама логика с симконнектом изучена от ии до потом уже пишем собственные обработчики событий и функции и отказываемся от OCX. Тока в этом OCX уже все функции прописаны правильно с правильным синтаксисом… получается тоже самое что и писать руками. За исключением того что потом придется руками отлаживать баги и синтаксис..
Короче пусть сам решает что использовать для изучения симконнекта или SDK в котром черт-ногусломит нах.. или визуальный компонент..
FortRoss
17.03.2008 в 05:34
Ну у меня все примеры работают. И дока понятная, почему-то… может, стоит консерваторию поправить?
imitator
17.03.2008 в 06:36
FortRoss (17.03.2008 07:34) писал:
Ну у меня все примеры работают. И дока понятная, почему-то… может, стоит консерваторию поправить?
…у меня тоже все примеры работают, по крайней мере те, которые запускал, но не могу согласится что докуметация по симконнекту такая уж понятная.
Есть конечно описание функций и переменных, расписано как это нужно использовать, но нет обьяснений как это работает. Поэтому если использовать методику, предлагаемую в документации и примерах — все легко правится и дорабатывается. Но как только возникла нестандартная ситуация — приехали …
… особенно трудно тогда, когда нужно сделать разовую разработку, используя тот же С++ и simconnect, при этом человек не позиционируется себя как программист на С++, до этого ничего не писал и писать в будущем не планирует, как в моем случае
p.s. на всякий случай еще раз повторю: все вышло, все работает, всем спасибо за помощь…
«Качайте DirectX SDK и там смотрите раздел по DirectInput.
В частности, потребуется управляться с интерфейсом IDirectInputDevice8.
Опрашивайте кнопки — либо буферизованно (IDirectInputDevice8::GetDeviceData) — тогда будете знать, что за чем нажато, либо напрямки (IDirectInputDevice8::GetDeviceState), тогда отслеживать изменение состояния придется самостоятельно…»
Взял учебный пример из DirectX SDK, скомпилировал… Запустил приложение и убедился в том, что видны все кнопки!!!!
Отсюда вывод: simconnect имеет ограничение 32 кнопки при опросе джоя, DX не имеет…
Следовательно нужно просто опрашивать джой через SDK, команды в сим подавать через simconnect.
«Качайте DirectX SDK и там смотрите раздел по DirectInput.
В частности, потребуется управляться с интерфейсом IDirectInputDevice8.
Опрашивайте кнопки — либо буферизованно (IDirectInputDevice8::GetDeviceData) — тогда будете знать, что за чем нажато, либо напрямки (IDirectInputDevice8::GetDeviceState), тогда отслеживать изменение состояния придется самостоятельно…»
Взял учебный пример из DirectX SDK, скомпилировал… Запустил приложение и убедился в том, что видны все кнопки!!!!
Отсюда вывод: simconnect имеет ограничение 32 кнопки при опросе джоя, DX не имеет…
Следовательно нужно просто опрашивать джой через SDK, команды в сим подавать через simconnect.
Копался я в этих примерах. Самое, на сколько я понял сложное — это найти все имеющиеся джойстики, и все, что у них имеется. В учебнике DirectX SDK это шаг №1 Выполняется как-то так:
А вот потом в функции EnumJoysticksCallback
BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE* pdidInstance, VOID* pContext) { HRESULT hr; // Obtain an interface to the enumerated joystick. hr = g_pDI->CreateDevice(pdidInstance->guidInstance, &g_pJoystick, NULL); if(FAILED(hr)) return DIENUM_CONTINUE; return DIENUM_STOP;В функции должно быть описано создание устройства и что делать с каждым найденным джойстиком, а вот как раз этому в примерах уделено очень мало (почти ничего). Там ищется первый джойстик и все заканчивается.
К примеру — от одна из них. Весь необходимый сурс + екзампл. В экзампле для примера показана работа только с первым джоем, работа с остальными (если есть конечно) — аналогично. У меня все работает. Не забудьте подключить директинпутный либ.
http://www.csh.rit.edu/~jon/projects/joyst…oystick-1.0.zip
К примеру — от одна из них. Весь необходимый сурс + екзампл. В экзампле для примера показана работа только с первым джоем, работа с остальными (если есть конечно) — аналогично. У меня все работает. Не забудьте подключить директинпутный либ.
http://www.csh.rit.edu/~jon/projects/joyst…oystick-1.0.zip
спасибо, этот пример тоже работает, теперь прийдется за книжки сесть, язык ковырять…
в любом случае уже виден свет в конце тоннеля
К примеру — от одна из них. Весь необходимый сурс + екзампл. В экзампле для примера показана работа только с первым джоем, работа с остальными (если есть конечно) — аналогично. У меня все работает. Не забудьте подключить директинпутный либ.
http://www.csh.rit.edu/~jon/projects/joyst…oystick-1.0.zip
Lavrik
Огромное спасибо за ссылку. На ее основе содержащегося там кода уже удалось сварганить простейший GAU-прибор, реагирующий на нажатие кнопок двух моих джойстиков.
… с С++ еще туда сюда, а вот с simconnect’ом… Нажатия кнопок вижу, а вот как это преобразовать в команду для симконнекта…. Тоесть команды там по Евенту должны срабатывать, но поскольку опрос джоя не на симконнекте — ессно события не возникают. Ника не соображу как сформировать событие, чтоб симконнект их увидел и послал в сим…
имконенкт это несколько большее чем ты себе представляеш ! То о чем сейчас говориш — это такой маленькая песчинка на фоне просто огромных возможностей симмконнекта.
Я пользуюсь только визуальной средой и не испытываю проблем с программированием симконнекта:
http://www.avsim.su/forum/style_images/1/f…/attach_add.png
Прикрепленные изображения
Вобщем тут всё уже давно забито все заголовки.. Просто остаетяс работать с ним и всё..
формирование событий — функция SimConnect_TransmitClientEvent. Посылать может как и встроенные эвенты сима, так и кастомные, специфичные для конкретной модели эвенты
PS работая из-под Visual C++ с коннектом, использовать еще какие-то дополнительные модули — называется «достать до гланд через задницу».
формирование событий — функция SimConnect_TransmitClientEvent. Посылать может как и встроенные эвенты сима, так и кастомные, специфичные для конкретной модели эвенты
PS работая из-под Visual C++ с коннектом, использовать еще какие-то дополнительные модули — называется «достать до гланд через задницу».
блин, я эту хрень и искал (SimConnect_TransmitClientEvent)
Чтоб найти пол дня убил…. Но уже запустил и работает, правда столкнулся с интересным явлением: кнопки с большими номерами отрабатывают одно нажатие, с малыми — до пяти — шести раз… пришлось задержки ставить принудительно, вроде бы победил.
формирование событий — функция SimConnect_TransmitClientEvent. Посылать может как и встроенные эвенты сима, так и кастомные, специфичные для конкретной модели эвенты
PS работая из-под Visual C++ с коннектом, использовать еще какие-то дополнительные модули — называется «достать до гланд через задницу».
дело не в этом. Вся проблема для начинающих и НЕ НАЧИНАЮЩИХ программеров в том что часть примеров из собственно го же SDK по симконнекту не пашет !
Как организовать передачу данных практически нигде не описана. Существует четкая последовательность действий состоящая из 3-х строк которая заставляет работать с переменными , модифицировать их и принимать. В SDK это всё описано но не явно. Нет четкого описания действий для того чтобы ….
1. Принимать данные с переменных
2. Педавать данные переменным
3. Передавать евенты
4. передавать ементам параметры.
Им нужно было пунк за пунктом с комментариями напротив каждой строки привести примеры . Примеры есть , но я лично запутался в описниях функций и суть до конца не понял , пока не увидел напримере этого OCX как же в реале организуется связь с симконнектом.
Следующее препятствие — всё на аглийском языке с использованием специфических терминов.
Разберется только подготовленный и опытный программер за плечами которого не один десяток релизов софта… У меня нет десятка релизов.. Но я разобрался. Если изучать исходники чужих прмеров , то непрофессионал легко запутается в описании заголовков и функций , и толком не поймет какжде работает этот симконнект. Этот OCX прошлый век , но он дает наглядное предсьтавление как же пашет это всё — тоесть саму логику. Например все начинающие программить симконнект считают что воздействие на перменную выглядит примерно так —
ИМЯ_ПЕРЕМЕННОЙ=величина. Или обратно : Величина=ИМЯ_ПРЕМЕННОЙ и пытаются заставить работать симконнект от таких вот строк. Что такое группы , приоритеты — это уже потустронний непонятный мир симконнекта.
Как тока сама логика с симконнектом изучена от ии до потом уже пишем собственные обработчики событий и функции и отказываемся от OCX. Тока в этом OCX уже все функции прописаны правильно с правильным синтаксисом… получается тоже самое что и писать руками. За исключением того что потом придется руками отлаживать баги и синтаксис..
Короче пусть сам решает что использовать для изучения симконнекта или SDK в котром черт-ногусломит нах.. или визуальный компонент..
…у меня тоже все примеры работают, по крайней мере те, которые запускал, но не могу согласится что докуметация по симконнекту такая уж понятная.
…
Есть конечно описание функций и переменных, расписано как это нужно использовать, но нет обьяснений как это работает. Поэтому если использовать методику, предлагаемую в документации и примерах — все легко правится и дорабатывается. Но как только возникла нестандартная ситуация — приехали
… особенно трудно тогда, когда нужно сделать разовую разработку, используя тот же С++ и simconnect, при этом человек не позиционируется себя как программист на С++, до этого ничего не писал и писать в будущем не планирует, как в моем случае
p.s. на всякий случай еще раз повторю: все вышло, все работает, всем спасибо за помощь…