सी

2012-01-15 5 views
11

में __uuidof के लिए वैकल्पिक मैं एक सी परियोजना के साथ काम कर रहा हूं जो डायरेक्टएक्स का उपयोग कर रहा है और मैंने एक समस्या में भाग लिया है। कुछ डीएक्स कॉलों को IID ऑब्जेक्ट की आवश्यकता होती है, आमतौर पर __uuidof के साथ उत्पन्न होती है। RenderTargetView बनाने के लिए यह एक चीज आवश्यक है। DirectX नमूने/ट्यूटोरियल ऐसा करते हैं:सी

ID3D11Texture2D* pBackBuffer = NULL; 
hr = g_pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&pBackBuffer); 

जब मैं अपने सी कोड में __uuidof कॉल करने के लिए प्रयास करते हैं, मैं एक संकलक त्रुटि मिलती है: Error 19 error C4233: nonstandard extension used : '__uuidof' keyword only supported in C++, not C। डायरेक्टएक्स में सी इंटरफ़ेस है, इसलिए मुझे लगता है कि ऐसा करने का एक तरीका होना चाहिए, लेकिन मुझे नहीं पता कि यह क्या होगा। किसी को पता है?

+0

सी प्रोग्रामर आमतौर पर यूयूआईडी को अपनी स्रोत फ़ाइल में कहीं भी स्थिर के रूप में परिभाषित करते हैं। –

उत्तर

13

__uuidof केवल सी ++ में उपलब्ध है, जैसा कि वर्णित त्रुटि है। मुझे लगता है कि आपके पास पहले से ही डीएक्स हेडर फाइलों में सी के लिए इंटरफेस के GUID की परिभाषाएं हैं।

http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/1306b57f-4b75-4f0c-b4f3-9bcc1e3a0dd6

d3d11.h से:

EXTERN_C const IID IID_ID3D11Texture2D; 

उपयोग इस के बजाय __uuidof(ID3D11Texture2D)

+2

हाँ, उसने ऐसा किया। मुझे केवल एक ही बदलाव करना था जिसे 'dxguid.lib' से लिंक करना था। धन्यवाद। – Kyle

2

आपको कक्षा के यूयूआईडी या "गाइड" को ढूंढना होगा। यह डायरेक्टएक्स एसडीके (पुराने) में या प्लेटफार्म एसडीके (विंडोज विस्टा और विंडोज 7 पर) में कुछ शीर्षलेख में होना चाहिए - जो आप उपयोग कर रहे हैं उस पर निर्भर करता है।