2012-01-15 11 views
11

Tôi đang làm việc với dự án C đang sử dụng DirectX và tôi đã gặp sự cố. Một số cuộc gọi DX yêu cầu đối tượng IID, thường được tạo với __uuidof. Một điều này là cần thiết để tạo một RenderTargetView. Các mẫu DirectX/hướng dẫn thực hiện điều này:Thay thế cho __uuidof trong C

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

Khi tôi cố gắng gọi __uuidof trong mã C của tôi, tôi nhận được một lỗi biên dịch: Error 19 error C4233: nonstandard extension used : '__uuidof' keyword only supported in C++, not C. DirectX có một giao diện C, vì vậy tôi tưởng tượng phải có một cách để làm điều này, nhưng tôi không có ý tưởng nó sẽ là gì. Có ai biết không?

+0

C lập trình viên thường chỉ xác định UUID là một hằng số ở đâu đó trong tệp nguồn của họ. –

Trả lời

13

__uuidof chỉ khả dụng trong C++, như được mô tả. Tôi nghĩ rằng bạn đã có định nghĩa của GUIDs của các giao diện cho C có sẵn trong các tập tin tiêu đề DX.

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

Từ d3d11.h:

EXTERN_C const IID IID_ID3D11Texture2D; 

Sử dụng này thay vì __uuidof(ID3D11Texture2D).

+2

Đúng, điều đó đã xảy ra. Sự thay đổi duy nhất tôi phải thực hiện là liên kết với 'dxguid.lib'. Cảm ơn. – Kyle

2

bạn phải tìm uuid hoặc "guid" của lớp học. nó phải ở một số tiêu đề trong sdx directx (cũ hơn) hoặc trong SDK nền tảng (trên Windows Vista và Windows 7) - tùy thuộc vào những gì bạn đang sử dụng.