2014-08-29 78 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