#c# #directx
#c# #directx
Вопрос:
Я пишу код и приложение, для которого требуется доступ к DirectX на C #. В частности, для этого требуется доступ к Dinput8.dll функция DirectInput8Create.
Я на самом деле делаю некоторые перехваты .. и в настоящее время я просто пытаюсь перехватить вызов и передать его. У меня возникают проблемы только с поиском правильных типов переменных для вызова DLL.
У меня только что была мозговая волна, и я думаю, что мне нужно будет использовать Unsafe, чтобы заставить его работать .. но я не уверен на 100%.
Комментарии:
1. Ваш вопрос был бы лучше, если бы вы предоставили немного больше деталей и показали некоторый код. Какие функции вам нужны в Dinput8.dll ? Может быть канонический способ сделать то, что вы хотите, в управляемом коде.
2. Спасибо за это, Роберт. Я действительно включил эту функцию. Я также указал, что я выполняю подключение API. Поэтому мне нужно иметь возможность, по крайней мере, проходить через переменные, которые использует приложение, уже использующее функцию DirectInput8Create .
3. Итак, я попробовал некоторый небезопасный код..
[DllImport("Dinput8.dll",CharSet = CharSet.Unicode,SetLastError =true,CallingConvention = CallingConvention.StdCall)] static extern unsafe int DirectInput8Create(IntPtr hinst, UInt32 dwversion,Guid refid,out void **lpvoid, int* Fail);
Но это все равно не радует. У кого-нибудь есть идеи?4.
static unsafe int CreateDevice_Hooked(IntPtr hinst, UInt32 dwversion, Guid refid, out int*[] lpvoid, void* Fail) { return DirectInput8Create(hinst, dwversion, refid, out lpvoid, Fail); }
Новейшая версия кода… Это работает немного лучше.. но все равно зависает приложение.
Ответ №1:
Извините, что затронул старый пост, но для людей, которые ищут причину сбоя этого перехвата, кажется, что подключенная функция вызывается изнутри перехвата. Это создает переполнение.
Ответ №2:
Я не уверен, почему вы сразу перешли к подключению… Так что я, возможно, что-то упускаю из-за неопределенности вопроса.
Если вы хотите подключить DirectX из c #, это одно… Но если вам просто нужен реальный доступ к DX, прямой ввод, тогда я бы просто использовал SharpDX…
Я использовал его раньше, в частности, с прямым вводом, чтобы получить прямой доступ к контроллеру Xbox, подключенному к ПК с Windows, и это было совершенно без проблем.
Комментарии:
1. #DX не поддерживает DX8, к сожалению, на данный момент у них есть экспериментальная поддержка DX9.
2. @JonathanDickinson Я не знаю, почему вы так думаете.. Я смотрю на код прямо сейчас: code.google.com/p/sharpdx/source/browse/Source/… Довольно ясно, что он вызывает Dinput8.dll … например: DInput. DirectInput8Create и т.д.
3. Хммм… Тогда их целевая страница устарела :).
4. Да .. так что я подключаюсь.. Это для расширения приложения, которое мы уже используем. Мне нужно иметь возможность перехватить его, настраивая Dinput. В основном для того, чтобы я мог получать указатели из таблиц Vt. В конечном итоге мы пытаемся перехватить GetDeviceStatus, чтобы мы могли добавлять пользовательский ввод с другого устройства, с которого мы извлекаем показания.. Это долгая история, и мы бы написали драйвер, если бы думали, что это сработает, но это не сработает. Итак, мы пытаемся «обмануть» систему и вставить информацию напрямую.
5. Вы можете использовать EasyHook для подключения собственного API из .NET / C #: easyhook.codeplex.com