엔진을 개발중인 학생입니다, 개발중 임시 객체에 대하여 고민을 해보다 보니까, DirectX 에선 객체를 그냥 객체도 아닌 포인터에 담아내는걸 봤습니다. 이건 포인터가 생성되는 함수에서 그냥 객체 선언을 한뒤 포인터를 리턴하는건가요? 아니면 뭐 다른 처리 방식이라도 있는걸까요?
참고가 되는. 키워드를 찾아봤습니다.
요약해보면.
1. call by reference 찾아보기 2. call by pointer 찾아보기 함수의 인자값 참조 방식을 알게 되면. COM이나 DLL에서의 함수 포인터나 값을 얻는 방법을 알게 됩니다. 그것이 COM Interface 처럼 생각되는데요. 그냥 쉽게. GUID가 레지스트리에 등록되어 있는 DLL의 함수 모음으로 생각하시면 알기 편합니다. 3. 임시 객체 http://blog.naver.com/jjungyoon87?Redirect=Log&logNo=100090741702 4. 함수 포인터와 DLL 사용 방법 http://micingamja.egloos.com/5706757 5. 기본 소스 http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10403&docId=71718457&qb=RGlyZWN0WOydmCDqsJ3ssrQg7IOd7ISxIOybkOumrA==&enc=utf8§ion=kin&rank=1&search_sort=0&spq=0&pid=RLB/zc5Y7u8ssvgsca8sssssssN-332372&sid=UNj-zHJvLC8AADTADvc 소스를 복사해서 컴파일 해보세요. 헤더에 #pragma comment (lib, "D3d9.lib") 가 필요합니다. 컴파일이 되면. F9로 브레이크 포인터 찍기. F10과 F11로 함수 하나하나 참조되는 값을 확인해보세요. // LPDIRECT3D9 변수(객체)를 알고 싶다면. 그 변수로 접근해 보시면 좋습니다. LPDIRECT3D9 변수에서 마우스 우측 버튼을 누르면 Go to Definition 이 있습니다. 해당 변수를 따라가 보세요. 이런것이 있습니다. typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9; 구조체 포인터 입니다. #undef INTERFACE #define INTERFACE IDirect3D9 DECLARE_INTERFACE_(IDirect3D9, IUnknown) { /*** IUnknown methods ***/ STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D9 methods ***/ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE; STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE; STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER9* pIdentifier) PURE; STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter,D3DFORMAT Format) PURE; STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,D3DFORMAT Format,UINT Mode,D3DDISPLAYMODE* pMode) PURE; STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3DDISPLAYMODE* pMode) PURE; STDMETHOD(CheckDeviceType)(THIS_ UINT iAdapter,D3DDEVTYPE DevType,D3DFORMAT DisplayFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed) PURE; STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat) PURE; STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels) PURE; STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat) PURE; STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat) PURE; STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9* pCaps) PURE; STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE; STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface) PURE; }; 보시면. STDMETHOD 는 virtual 로 선언되어 있고. PURE의 값은 0 입니다. 순수 가상함수.를 인터페이스로 사용하고 있다고 보입니다. #if defined(__cplusplus) && !defined(CINTERFACE) //#define interface struct FAR #define interface struct #define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method #define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method #define STDMETHODV(method) virtual HRESULT STDMETHODVCALLTYPE method #define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method #define PURE = 0 #define THIS_ #define THIS void #define DECLARE_INTERFACE(iface) interface DECLSPEC_NOVTABLE iface #define DECLARE_INTERFACE_(iface, baseiface) interface DECLSPEC_NOVTABLE iface : public baseiface DECLARE_INTERFACE_를 따라가보면. 이런것이 나옵니다. #define DECLARE_INTERFACE_(iface, baseiface) interface DECLSPEC_NOVTABLE iface : public baseiface #define DECLSPEC_NOVTABLE __declspec(novtable) 여기서 interface라고 있는데. 이건 C++ interface라고 네이버에서 찾아보시면. 다양한 자료가 나옵니다. 이렇게 모르는건 하나하나 따라가면서. 찾아보고 확인하고 검증하면. 객체가 뭔지 아실 수 있습니다. //MSDN http://msdn.microsoft.com/en-us/library/windows/desktop/bb174300(v=vs.85).aspx //IUnknown Interface http://cafe.naver.com/prostudy12/43 //__declspec 찾아보기 // 각종 게임 서적 찾아보기. 동아리 및 세미나 참석하기... 등등 ㅇ_ㅇ;;;
---------------------------------------------------------------------------- 젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다. 정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
이건 책을 몇권 봐야 알겠습니다.
참고가 되는. 키워드를 찾아봤습니다.
요약해보면.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기