9 replies to this topic
#1 Members - Reputation: 301
Posted 27 November 2012 - 12:32 PM
Hello,
I am trying to use the WICTextureLoader functions as provided by Frank Luna, and I keep branching to return E_NOINTERFACE. Here is how the code goes:
HRESULT CreateWICTextureFromMemory( _In_ ID3D11Device* d3dDevice,
_In_opt_ ID3D11DeviceContext* d3dContext,
_In_bytecount_(wicDataSize) const uint8_t* wicData,
_In_ size_t wicDataSize,
_Out_opt_ ID3D11Resource** texture,
_Out_opt_ ID3D11ShaderResourceView** textureView,
_In_ size_t maxsize
)
{
if (!d3dDevice || !wicData || (!texture && !textureView))
{
return E_INVALIDARG;
}
if ( !wicDataSize )
{
return E_FAIL;
}
#ifdef _M_AMD64
if ( wicDataSize > 0xFFFFFFFF )
return HRESULT_FROM_WIN32( ERROR_FILE_TOO_LARGE );
#endif
IWICImagingFactory* pWIC = _GetWIC();
if ( !pWIC )
return E_NOINTERFACE;
----------------
I read somewhere that this has something to do with not calling CoInitializeEx(), but since I know nothing about COM objects except for the fact that Direct3D and Windows use them heavily, I was hoping somebody could help me figure out where in my code to call CoInitializeInstanceEx() and what parameters to use, or if this is not the problem at all.
Thanks in advance.
-Dave Ottley
I am trying to use the WICTextureLoader functions as provided by Frank Luna, and I keep branching to return E_NOINTERFACE. Here is how the code goes:
HRESULT CreateWICTextureFromMemory( _In_ ID3D11Device* d3dDevice,
_In_opt_ ID3D11DeviceContext* d3dContext,
_In_bytecount_(wicDataSize) const uint8_t* wicData,
_In_ size_t wicDataSize,
_Out_opt_ ID3D11Resource** texture,
_Out_opt_ ID3D11ShaderResourceView** textureView,
_In_ size_t maxsize
)
{
if (!d3dDevice || !wicData || (!texture && !textureView))
{
return E_INVALIDARG;
}
if ( !wicDataSize )
{
return E_FAIL;
}
#ifdef _M_AMD64
if ( wicDataSize > 0xFFFFFFFF )
return HRESULT_FROM_WIN32( ERROR_FILE_TOO_LARGE );
#endif
IWICImagingFactory* pWIC = _GetWIC();
if ( !pWIC )
return E_NOINTERFACE;
----------------
I read somewhere that this has something to do with not calling CoInitializeEx(), but since I know nothing about COM objects except for the fact that Direct3D and Windows use them heavily, I was hoping somebody could help me figure out where in my code to call CoInitializeInstanceEx() and what parameters to use, or if this is not the problem at all.
Thanks in advance.
-Dave Ottley
I wonder as I wander...
Sponsor:
#4 Members - Reputation: 301
Posted 27 November 2012 - 01:35 PM
eppo,
Here is the code for _GetWIC(), which fails with REGDB_E_CLASSNOTREG:
static IWICImagingFactory* _GetWIC()
{
static IWICImagingFactory* s_Factory = nullptr;
if ( s_Factory )
return s_Factory;
HRESULT hr = CoCreateInstance(
CLSID_WICImagingFactory,
nullptr,
CLSCTX_INPROC_SERVER,
__uuidof(IWICImagingFactory),
(LPVOID*)&s_Factory
);
if ( FAILED(hr) )
{
s_Factory = nullptr;
return nullptr;
}
return s_Factory;
}
Here is the code for _GetWIC(), which fails with REGDB_E_CLASSNOTREG:
static IWICImagingFactory* _GetWIC()
{
static IWICImagingFactory* s_Factory = nullptr;
if ( s_Factory )
return s_Factory;
HRESULT hr = CoCreateInstance(
CLSID_WICImagingFactory,
nullptr,
CLSCTX_INPROC_SERVER,
__uuidof(IWICImagingFactory),
(LPVOID*)&s_Factory
);
if ( FAILED(hr) )
{
s_Factory = nullptr;
return nullptr;
}
return s_Factory;
}
I wonder as I wander...
#5 Members - Reputation: 1031
Posted 27 November 2012 - 01:47 PM
Cut-n-paste the full source at the bottom of this link:
http://msdn.microsoft.com/en-us/library/windows/desktop/ff476904(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ff476904(v=vs.85).aspx
Love DAOC? Tryout my DAOC clone: https://dl.dropboxusercontent.com/u/8974528/VON_Dist.zip
#8 Members - Reputation: 301
Posted 27 November 2012 - 02:26 PM
This is unrelated, but I thought I'd take this opportunity to ask why when I write:
assert(buffer[imageDataStartsHere] == 89 && "Image data does not really start here.");
The error message I receive is: Expression: buffer[imageDataStartsHere] == 89 && "Image data does not really start here."
I just wanted the stuff in double quotes. Is there any way to get this?
Thanks.
-Dave Ottley
assert(buffer[imageDataStartsHere] == 89 && "Image data does not really start here.");
The error message I receive is: Expression: buffer[imageDataStartsHere] == 89 && "Image data does not really start here."
I just wanted the stuff in double quotes. Is there any way to get this?
Thanks.
-Dave Ottley
I wonder as I wander...
#10 Members - Reputation: 1031
Posted 27 November 2012 - 03:15 PM
Sorry somehow the link got cut.
"http://msdn.microsoft.com/en-us/library/windows/desktop/ff476904(v=vs.85).aspx"
"http://msdn.microsoft.com/en-us/library/windows/desktop/ff476904(v=vs.85).aspx"
Edited by Steve_Segreto, 27 November 2012 - 03:15 PM.
Love DAOC? Tryout my DAOC clone: https://dl.dropboxusercontent.com/u/8974528/VON_Dist.zip






