2014-08-29 91 views
-1

這是Oculus的街景項目.....只是我想了解並運行,但我做不到......請幫助我如何運行DLL項目

// dllmain .cpp:定義DLL應用程序的入口點。

包括 「stdafx.h中」

BOOL APIENTRY的DllMain(HMODULE HMODULE, DWORD ul_reason_for_call, LPVOID lpReserved ) { 開關(ul_reason_for_call) { 情況下DLL_PROCESS_ATTACH: 情況DLL_THREAD_ATTACH: 情況DLL_THREAD_DETACH : case DLL_PROCESS_DETACH: break; } return TRUE; }

包括「stdafx.h中」

#include "libovrwrapper.h" 
#include <OVR.h> 

using namespace OVR; 

// Ptr<> AddRef'ed, AutoCleaned 
bool    bInited = false; 
Ptr<DeviceManager> pManager; 
Ptr<HMDDevice>  pHMD; 
Ptr<SensorDevice> pSensor; 
SensorFusion  pSensorFusion; 


LIBOVRWRAPPER_API int OVR_Init() 
{ 
    bInited = false; 
    System::Init(Log::ConfigureDefaultLog(LogMask_Regular)); 

    if (System::IsInitialized()) 
    { 
     int stage = -1; 
     while (++stage > -1 && !bInited) 
     { 
     switch (stage) 
     { 
      case 0: 
       pManager = *DeviceManager::Create(); 
       if (pManager == NULL) 
        return bInited; 
       break; 
      case 1: 
       pHMD  = *pManager->EnumerateDevices<HMDDevice>().CreateDevice(); 
       if (pHMD == NULL) 
        return bInited; 
       break; 
      case 2: 
       pSensor = *pHMD->GetSensor(); 
       if (pSensor == NULL) 
        return bInited; 
       break; 
      default: 
       bInited = true; 
       break; 
     }; 
     } 
    } 

    pSensorFusion.AttachToSensor(pSensor); 

    return (bInited?1:0); 
} 


LIBOVRWRAPPER_API void OVR_Exit() 
{ 
    if (bInited) 
    { 
     System::Destroy(); 
    } 
} 


LIBOVRWRAPPER_API int OVR_QueryHMD(OVR_HMDInfo* refHmdInfo) 
{ 
    if (!bInited) 
    { 
     return 0; 
    } 

    HMDInfo src; 
    if (pHMD->GetDeviceInfo(&src)) 
    { 
     refHmdInfo->HResolution    = src.HResolution; 
     refHmdInfo->VResolution    = src.VResolution; 
     refHmdInfo->HScreenSize    = src.HScreenSize; 
     refHmdInfo->VScreenSize    = src.VScreenSize; 
     refHmdInfo->VScreenCenter   = src.VScreenCenter; 
     refHmdInfo->EyeToScreenDistance  = src.EyeToScreenDistance; 
     refHmdInfo->LensSeparationDistance = src.LensSeparationDistance; 
     refHmdInfo->InterpupillaryDistance = src.InterpupillaryDistance; 
     refHmdInfo->DistortionK[0]   = src.DistortionK[0]; 
     refHmdInfo->DistortionK[1]   = src.DistortionK[1]; 
     refHmdInfo->DistortionK[2]   = src.DistortionK[2]; 
     refHmdInfo->DistortionK[3]   = src.DistortionK[3]; 
     refHmdInfo->DesktopX    = src.DesktopX; 
     refHmdInfo->DesktopY    = src.DesktopY; 
     memcpy(refHmdInfo->DisplayDeviceName, src.DisplayDeviceName, sizeof(refHmdInfo->DisplayDeviceName));  
    } 

    return 1; 
} 
LIBOVRWRAPPER_API int OVR_PeekYPL(float* yaw, float* pitch, float* roll) 
{ 
     if (!bInited) 
    { 
     return 0; 
    } 

    Quatf hmdOrient = pSensorFusion.GetOrientation(); 
    hmdOrient.GetEulerAngles<Axis_Y, Axis_X, Axis_Z>(yaw, pitch, roll); 

    return 1; 
} 

LIBOVRWRAPPER_API int OVR_Peek(float* w, float* x, float* y,float * z) 
{ 
    if (!bInited) 
    { 
     return 0; 
    } 

    Quatf hmdOrient = pSensorFusion.GetOrientation(); 
    *w = hmdOrient.w; 
    *x = hmdOrient.x; 
    *y = hmdOrient.y; 
    *z = hmdOrient.z; 

    //hmdOrient.GetEulerAngles<Axis_Y, Axis_X, Axis_Z>(yaw, pitch, roll); 

    return 1; 
} 

#ifdef LIBOVRWRAPPER_EXPORTS 
    #if defined __cplusplus 
     #define LIBOVRWRAPPER_API extern "C" __declspec(dllexport) 
    #else 
     #define LIBOVRWRAPPER_API __declspec(dllexport) 
    #endif 
#else 
    #if defined __cplusplus 
     #define LIBOVRWRAPPER_API extern "C" __declspec(dllimport) 
    #else 
     #define LIBOVRWRAPPER_API __declspec(dllimport) 
    #endif 
#endif 

struct OVR_HMDInfo 
{ 
    unsigned  HResolution; 
    unsigned  VResolution; 
    float   HScreenSize; 
    float   VScreenSize; 
    float   VScreenCenter; 
    float   EyeToScreenDistance; 
    float   LensSeparationDistance; 
    float   InterpupillaryDistance; 
    float   DistortionK[4]; 
    int   DesktopX; 
    int   DesktopY; 
    char   DisplayDeviceName[32]; 
}; 


LIBOVRWRAPPER_API int OVR_Init(); 
LIBOVRWRAPPER_API void OVR_Exit(); 
LIBOVRWRAPPER_API int OVR_QueryHMD(struct OVR_HMDInfo* refHmdInfo); 
LIBOVRWRAPPER_API int OVR_Peek(float* w, float* x, float* y,float * z); 
LIBOVRWRAPPER_API int OVR_PeekYPL(float* yaw, float* pitch, float* roll); 
+0

這是Oculus SDK項目。當這個項目成功運行時,它會查看HMD ...........但我無法成功。 我想運行這種類型的程序,鼓勵我很多。先進的感謝。 – 2014-09-04 01:17:10

回答

0

你提的問題是很難理解的,因爲它不會對你已經嘗試過什麼什麼真正的東西,什麼是不工作,等

它看起來像你試圖「運行」一個DLL,這是不可能的。一個DLL必須由另一個應用程序加載。所以你會有一個可執行文件來加載這個DLL,並調用它的OVR_Init和OVR_Exit函數。

+0

謝謝你的誠摯回覆。這是Oculus SDK項目。當這個項目成功運行時,它將顯示HMD ...........但我無法成功。 我想運行這種類型的程序,鼓勵我很多。先進的感謝。 – 2014-09-04 01:18:17

+0

如何使用Visual Studio Express 2012 for windows 32位運行Oculus World Demo編程 – 2014-09-04 03:53:46