Показать сообщение отдельно
Старый 16.05.2013, 21:49   #7
DarkMedveD
ПроЭктировщик
 
Аватар для DarkMedveD
 
Регистрация: 26.12.2008
Адрес: Usa
Сообщений: 151
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Передача указателя на интерфейс через DLL

Проект библиотеки:
Файл заголовка:
class  Shader
{
public:

	 	ID3DXBuffer* shader;
	 	 ID3DXBuffer* errorBuffer;

	     IDirect3DVertexShader9* DiffuseShader;
	 	ID3DXConstantTable* DiffuseConstTable;

	 	D3DXMATRIX View;
	 	D3DXMATRIX Proj;
		SUPERLIB_API Shader();
	  	SUPERLIB_API  HRESULT loadShader(LPCSTR,LPCSTR,LPCSTR);
		SUPERLIB_API 	void UpdateShader(D3DXMATRIX, D3DXMATRIX);
	    SUPERLIB_API 	void SetVector(LPCSTR, D3DXVECTOR4);
		SUPERLIB_API   void SetMatrix(LPCSTR, D3DXMATRIX);
	    SUPERLIB_API 	void SetFloat(LPCSTR, FLOAT);
	    SUPERLIB_API 	void SetInt(LPCSTR, INT);

};
Файл исходного кода:
HRESULT Shader::loadShader(LPCSTR sourse, LPCSTR point, LPCSTR version)
{
	HRESULT hr=0;

	 hr = D3DXCompileShaderFromFile(
              sourse,
              0,
              0,
              point, // имя точки входа
			  version,
			  D3DXSHADER_AVOID_FLOW_CONTROL,
              &shader,
              &errorBuffer,
              &DiffuseConstTable);


     if(errorBuffer)
     {
          ::MessageBox(0, (char*)errorBuffer->GetBufferPointer(), 0, 0);
          Release<ID3DXBuffer*>(errorBuffer);
     }

     if(FAILED(hr))
     {
          ::MessageBox(0, "Ошибка компиляции шейдера", 0, 0);
          return false;
     }

	 if(Device)
		 Device->CreateVertexShader((DWORD*)shader->GetBufferPointer(), &DiffuseShader);

     if(FAILED(hr))
     {
          ::MessageBox(0, "CreateVertexShader - FAILED", 0, 0);
          return false;
     }

     Release<ID3DXBuffer*>(shader);



     DiffuseConstTable->SetDefaults(Device);

	 return true;
}
После подключения библиотеки, в проекте пишу:

diffuse.loadShader("VertexShader.hlsl", "main","vs_1_1");
Результата, разумеется, нет.

Кстати, во время ошибки вылазит некоторая служебная информация от студии. Там указаны значения каждого из объектов. Что странно - вроде в объекте шейдера все в порядке, а вот объект Device всегда содержит 0x00000000.

Последний раз редактировалось DarkMedveD, 17.05.2013 в 00:06.
(Offline)
 
Ответить с цитированием