Очень хорошо. Я посмотрю на это с интересом, спасибо. @Джеффри

шлом я создавал приложения DirectX на языке программирования C ++, однако я хотел бы знать, возможно ли это сделать с использованием языка программирования C.

Благодарю.

 user18032614 янв. 2011 г., 23:04
Есть ли причина ограничения C-only?

Ответы на вопрос(5)

Открыть Watcom C / C ++ Компилятор поставляется с примерами приложений DirectX на C ++ и C. Оба работают. Они подWATCOM\samples\directx\cpp а такжеWATCOM\samples\directx\c соответственно в OW 1.9.

Вот как выглядит код в C ++:

hr = d3d->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dcaps9);
hr = d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
hr = d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, game_window, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, &d3dpp, &d3d_dev);

И в С:

hr = IDirect3D9_GetDeviceCaps(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &d3dcaps9);
hr = IDirect3D9_GetAdapterDisplayMode(d3d, D3DADAPTER_DEFAULT, &d3ddm);
hr = IDirect3D9_CreateDevice(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, game_window, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED, &d3dpp, &d3d_dev);

Вам не нужно делать ничего особенного с COM в C, так как кажется, что достаточно макросов, которые вы можете просто использовать.

но так как вам не хватает функций более высокого уровня, которые предоставляет C ++, вы усложняете себе задачу.

 Geoffrey27 февр. 2019 г., 09:51
Во-первых, это не делает ничего сложнее, пожалуйста, узнайте, насколько мощным действительно является C, прежде чем утверждать, что C сложнее, чем C ++. Во-вторых, предоставленный учебник явно C ++.
 Simon01 мар. 2019 г., 12:00
Очень хорошо. Я посмотрю на это с интересом, спасибо. @Джеффри
 Simon27 февр. 2019 г., 11:51
@ Geoffrey Также из вашего комментария вы говорите, что я предположил, что C сложнее, чем C ++ (я не знаю, в каком контексте вы это имели в виду). Кривая обучения C намного меньше, чем C ++ (меньшая библиотека и общий меньший синтаксис, чем C ++). Однако вэто случай, когда вы пытаетесь использовать API-интерфейсы для C ++, используя их в C, делает вашу жизнь намного сложнее.
 Geoffrey28 февр. 2019 г., 10:55
Вот пример на C, над которым я сейчас работаю:github.com/gnif/LookingGlass/blob/master/c-host/windows/capture/..., Я действительно не понимаю, как это намного сложнее, просто немного по-другому.
 Simon27 февр. 2019 г., 11:49
@ Geoffrey На самом деле это так. Многие API для Windows используют C ++, который построен из классов. Чтобы использовать его, вам нужно получить доступ к классу в C, это возможно? Да, конечно. Это практично? Вовсе нет, гораздо проще использовать C ++, где вы уже используете классы, и поэтому вы можете использовать API как есть, без необходимости обходных путей.

упрощения использования интерфейса COM. Тем не менее, гораздо проще использовать C ++.

что в библиотеках DirectX есть некоторые компоненты только на C ++ (прошло уже много времени с тех пор, как я использовал его, и, насколько я помню, он содержит классы). Это также может сделать вашу жизнь немного проще и сделать это на C ++.

 David Heffernan14 янв. 2011 г., 22:29
@ Иисус действительно. Недавно мне пришлось реализовать COM-интерфейс в C. Это, конечно, заставило мою голову болеть.
 Jesus Ramos14 янв. 2011 г., 22:28
То, что ты можешь, не означает, что тебе следует иногда. Хотя, если он захочет, он может идти вперед, хе-хе.
 David Heffernan14 янв. 2011 г., 22:25
Вы можете сделать все это с помощью COM.
 David Heffernan14 янв. 2011 г., 22:37
@ Иисус Ах, я вспоминаю некоторые биты C ++. Это возможно только в процедурах для преобразования кодов ошибок в сообщения об ошибках?
 Jesus Ramos14 янв. 2011 г., 22:31
Я также делал подобные вещи, за исключением того, что у меня больше проблем с компонентами COM в .NET и C #, чем в C. Конечно, было бы здорово увидеть, что некоторые вещи DirectX работают эффективно через COM, это точно.
Решение Вопроса

это возможно. DirectX предоставляет интерфейс COM, а C способен их использовать. Это не будет целой кучей веселья!

 dreamlax14 янв. 2011 г., 22:23
Я пробовал. Вы привыкаете к этому, но все равно это не приятно и не легко.
 Jesus Ramos14 янв. 2011 г., 22:23
Этот способ также возможен, но, как сказал Дэвид, это совсем не будет весело. Желаем удачи, если вы попытаетесь пройти по этому маршруту.

Ваш ответ на вопрос