Передача девайса в DLL

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Передача девайса в DLL

Сообщение GLEB » 24.05.2006 (Ср) 15:43

Просто хочу посоветоваться.

Вот функция из DLL написанной на VC++ 6.0, которая просто включает свет.

Код: Выделить всё
__stdcall int dllrender(LPDIRECT3DDEVICE8 DEV)
{
   DEV->SetRenderState(D3DRS_LIGHTING, 1);
   return 0;
}




Вот ее объявление и вызов на VB 6.0

Код: Выделить всё
Public Declare Function dllrender Lib "render.dll" (ByVal Dev As Direct3DDevice8) As Long

Sub Render()
        ...

   D3DDevice.SetRenderState D3DRS_LIGHTING, 0
   
   Call dllrender(D3DDevice)
   
   Call RenderModel(...
        ...
End Sub

После выполнения dllrender, свет включается, все нормально работает.

1. Вообще, я правильно делаю, можно ли так и насколько стабильно это будет работать? (может это как-то по другому делается или чего не так в сишном коде, если что поправьте)

2. Почему параметр надо передавать, как ByVal (если ByRef, прога вылетает без всяких сообщений об ошибках). Dev - вроде указатель, которые обычно передаются как ByRef.

Wild VB Code for Food
Постоялец
Постоялец
 
Сообщения: 387
Зарегистрирован: 16.06.2005 (Чт) 17:34
Откуда: ты, друг? =)) Сообщений: 1234

Сообщение Wild VB Code for Food » 24.05.2006 (Ср) 23:07

Во первых)
Код: Выделить всё
__stdcall int dllrender(LPDIRECT3DDEVICE8 *DEV)  //Нужно передавать указатель.
{
   DEV->SetRenderState(D3DRS_LIGHTING, 1);
   return 0;
}


во-вторых) Зачем такой изврат?
Лучше думать чем жевать.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.05.2006 (Чт) 3:52

Wild VB Code for Food
Ты знаешь, LPDIRECT3DDEVICE8 - это УЖЕ указатель... А LPDIRECT3DDEVICE8* - это указатель на указатель (т.е. тот самый изврат данном случае).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GLEB
Бывалый
Бывалый
 
Сообщения: 246
Зарегистрирован: 24.05.2005 (Вт) 12:16

Сообщение GLEB » 25.05.2006 (Чт) 6:17

Wild VB Code for Food

Если сделать так:
Код: Выделить всё
__stdcall int dllrender(LPDIRECT3DDEVICE8 *DEV)  //Нужно передавать указатель.
{
   DEV->SetRenderState(D3DRS_LIGHTING, 1); error C2227: left of '->SetRenderState' must point to class/struct/union

   return 0;
}



во-вторых) Зачем такой изврат?

Ну, например, эта библиотека, что-то типа ActorMD5Plug.dll, которая с iRender3D идет, в Dll передатся только Device, а все действия происходят внутри ее.


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43

    TopList