2014-01-05 45 views
1

我有这个类:C3767:候选人功能(S)没有入店

#pragma once 

#ifndef _DEFINES_H_ 
#include "Defines.h" 
#endif 
#ifndef _GAMETIME_H_ 
#include "GameTime.h" 
#endif 
#ifndef _UTILITIES_H_ 
#include "Utilities.h" 
#endif 

#ifndef _GAME_H_ 

using namespace System; 

namespace BSGameFramework 
{ 
public ref class Game 
{ 
    public: 

     Game(); 
     virtual ~Game(); 

     void Run(HINSTANCE instance); 

     string Title; 
     int WindowWidth; 
     int WindowHeight; 

    protected: 

     virtual void Initialize(); 
     virtual void LoadContent(); 
     virtual void UnloadContent(); 
     virtual void Update(GameTime^ gameTime); 
     virtual void Draw(GameTime^ gameTime); 

    private: 

     HINSTANCE windowHandler; 
     HWND window; 
     DateTime lastTime; 
     TimeSpan totalGameTime; 

     D3D_DRIVER_TYPE driverType_; 
     D3D_FEATURE_LEVEL featureLevel_; 

     ID3D11Device* d3dDevice_; 
     ID3D11DeviceContext* d3dContext_; 
     IDXGISwapChain* swapChain_; 
     ID3D11RenderTargetView* backBufferTarget_; 

     void Shutdown(); 
}; 
} 

#define _GAME_H_ 

#endif 

,这是它的孩子:

#pragma once 

using namespace BSGameFramework; 

public ref class MyGame : Game 
{ 
public: 

    MyGame() 
    { 

    } 
}; 

然后当我主我打电话给我的运行功能:

#include <Windows.h> 
#include "MyGame.h" 

using namespace BSGameFramework; 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) 
{ 
MyGame ^game = gcnew MyGame(); 

game->Run(hInstance); // Here the error 
} 

我得到这个错误:

Error 1 error C3767: 'BSGameFramework::Game::Run': candidate function(s) not accessible 
C:\Users\Nicola\Desktop\directx prove\BSGameFramework\FrameworkTestCpp\Main.cpp 10 1 FrameworkTestCpp 

我试图从运行参数中删除HINSTANCE,并且所有工作正常,但我需要它,所以有人可以解释我为什么我得到这个错误,我该如何解决?提前致谢!

+1

可能重复[ C++ CLI错误C3767:候选函数不可访问](http://stackoverflow.com/questions/947213/c-cli-error-c3767-candidate-functions-not-accessible) –

+0

我在检查,我会告诉你,tnx:D – ThomasSquall

+0

关于你通过我的问题的解决方案,他们说问题是本机类型是私人默认情况下,CLI C++编译器,使他们说使用#pragma make_public,对于谁做的问题是工作,但不适合我,现在我得到这个错误的家伙: 错误错误C2158:“HINSTANCE” :#pragma make_public指令当前仅支持本地非模板类型\t c:\ users \ nicola \ desktop \ directx证明\ bsgameframework \ bsgame \ Defines.h BSGame – ThomasSquall

回答

1

我已经解决了这种方式:

inline void Game::Run(IntPtr instance) 
{ 
windowHandler = (HINSTANCE)instance.ToPointer(); 


// other code 
} 

现在我传递一个IntPtr不是原生类型,等等主要功能我有这样的:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) 
{ 
MyGame ^game = gcnew MyGame(); 

IntPtr instance(hInstance); 

game->Run(instance); 
} 
相关问题