새 svn 저장소를 만들고 checkout 받고 commit 까지 받았는데 show history를 했더니 아래와 같은 메시지가 뜬다.


Want to go offline?


There has been a problem contacting the server.

Do you want to see the cached data instead?


Please understand that the cached data may be outdated, incomplete or even misleading due to incomplete history data.


서버가 내려가 있나 싶었는데 update는 잘 동작하고 있었다.


로그나 리비전 그래프 볼 때는 유저 계정이 아니라 anonymous 를 이용하나 보다. authz 에 아래와 같이 anonymous 에게 read 권한을 줬더니 해결되었다.


[/]

@user = rw

$anonymous = r


출처 : http://mugrammer.tistory.com/63

728x90

UE4 의 블루프린트에 EnumToString 이라는 노드가 있는데 C++ native 단에서 구현하려면 아래와 같이 하면 되는 것 같다.

 

FString GetEnumString(TCHAR* EnumType, int32 EnumValue)
{
    UEnum* EnumObject = FindObject<UEnum>(ANY_PACKAGE, EnumType, true);

    if (EnumObject)
    {
        return EnumObject->GetEnumName(EnumValue);
    }

    return FString(TEXT("Unknown Enum"));
}

728x90

Mutex 를 이용하여 중복실행을 방지한다.

 

string mutexName = "MutexName";

Mutex mutex = new Mutex(true, mutexName);

 

// 실행 종료 중에는 획득할 수 없을 수도 있기 때문에 1초간 기다린다.

TimeSpan wait = new TimeSpan(0, 0, 1);

bool success = mutex.WaitOne(wait);

 

if (success == false)

{

MessageBox.Show("이미 실행중입니다.");

return;

}

 

참고 : http://egloos.zum.com/metashower/v/9468289

728x90

svn 을 쓰다보면 checkout 폴더가 용량이 말도 안되게 큰 경우를 보게된다. 폴더별 용량 확인 프로그램으로 보니 .svn 폴더가 소스 폴더보다 용량이 더 큰 상황이 벌어졌다. .svn 폴더의 prinstine 폴더가 그 주범이다. 해당 폴더를 정리하려면 svn cleanup 을 해주면 된다.


Tortorise Svn 의 경우 Clean up... 을 선택하고 Vacuum pristine copies 를 체크하고 OK를 누르면 된다.




728x90

언리얼 엔진 소스를 받아서 빌드한 에디터를 사용한 프로젝트를 빌드할 경우 Visual Studio 솔루션(sln) 파일에 엔진관련 프로젝트 파일도 포함되어 엔진도 다시 빌드되는 경우가 있다.

 

lib까지 포함된 에디터를 배포해도 엔진 빌드가 되고 엔진 빌드의 경우 혼자서 빌드하기에는 시간이 오래 걸려 짜증 났었는데 아래와 같은 명령어를 사용해서 빌드하면 엔진 빌드를 하지 않는다고 한다.

 

YourEngineFolder/Engine/Binaries/DotNET/UnrealBuildTool.exe "YourGameFolder/YourGameProjectName.uproject" -ProjectFiles -game -rocket

 

uproject 윈도우즈 shell extension 에 있는 "Generate Visual Studio project files" 명령과 차이가 뭔지 보기 위해 레지스트리를 검색해 봤다.

 

위치 : HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Unreal.ProjectFile

keyword : Generate Visual Studio project files

command : "C:\Program Files\Epic Games\Launcher\Engine\Binaries\Win64\UnrealVersionSelector.exe" /projectfiles "%1"

 

UnrealVersionSelector 소스에서 projectfiles 를 검색해서 코드를 보니 GenerateProjectFiles.bat 파일이나 Engine/Build/SourceDistribution.txt 파일이 있으면 프로젝트 파일 생성 시 -engine 옵션을 추가해주고 있었다.

 

배포된 커스텀 엔진을 보니 SourceDistribution.txt 파일이 있어서 삭제했더니 엔진 빌드를 하지 않게 되었다.

 

단점은 커스텀 엔진 배포시에 Debug / Debug Editor / Development / Development Editor / Shipping 으로 빌드된 lib 를 같이 배포해야 한다는 점이다.

728x90

자식 클래스에서 부모 클래스로 static_cast 하는 코드에서 C2243 에러가 나서 한참 해맸는데 class 상속할 때 public 으로 안해서 생긴 문제였음.

 

class B {};

class D : private B {};

class E : public B {};

 

D d;

B *p = &d; // C2243

 

E e;

B *p2 = &e;

 

D* d = new D;

B *p = static_cast<B*>(d); // C2243

 

출처 : Visual Studio 2015 Comipler Error C2243

728x90

boost 라이브러리를 1.55 에서 1.59 로 업데이트 후 링크 시에 아래와 같은 오류가 발생했다.


error LNK2019: "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z) 외부 기호(참조 위치: "void __cdecl boost::exception_detail::throw_exception_<struct boost::escaped_list_error>(struct boost::escaped_list_error const &,char const *,char const *,int)" (??$throw_exception_@Uescaped_list_error@boost@@@exception_detail@boost@@YAXABUescaped_list_error@1@PBD1H@Z) 함수)에서 확인하지 못했습니다.


boost:tokenizer 를 사용하고 있는데 exception 이 1.55 에서는 throw 를 사용하고 있던 코드가 BOOST_THROW_EXCEPTION 를 사용하도록 바뀌어서 발생한 문제였다.


// 1.55

    void do_escape(iterator& next,iterator end,Token& tok) {

      if (++next == end)

        throw escaped_list_error(std::string("cannot end with escape"));

      if (Traits::eq(*next,'n')) {

...


// 1.59

   void do_escape(iterator& next,iterator end,Token& tok) {

      if (++next == end)

        BOOST_THROW_EXCEPTION(escaped_list_error(std::string("cannot end with escape")));

      if (Traits::eq(*next,'n')) {

...


BOOST_NO_EXCEPTIONS 설정을 사용하는 경우 throw_exception 을 각 플랫폼에 맞춰서 구현해줘야 했는데 지금까지는 exception 을 발생시키는 boost library 를 사용하고 있지 않아서 몰랐던 것이었다.


// throw_exception.hpp

void throw_exception( std::exception const & e ); // user defined


일단 아래와 같이 구현해서 링크 에러는 해결했다.


namespace boost

{

void throw_exception(std::exception const & e)

{

throw e;

}

}


728x90

언리얼 4.6 이후 C++ Class 를 생성하면 Body 에 GENERATED_UCLASS_BODY 대신에 GENERATED_BODY 가 자동으로 채워진다. 4.6 릴리즈 노트에도 GENERATED_UCLASS_BODY 대신에 GENERATED_BODY 사용하라고 하는데 FObjectInializer 를 parameter 로 받는 constructor 에서 컴파일 오류가 나서 예전 방식대로 사용하고 있었다.

 

// header 

 

UCLASS()

class OldClass : public UObject

{

GENERATED_UCLASS_BODY()

};

 

UCLASS()

class NewClass : public UObject

{

GENERATED_BODY()

};

 

// cpp

 

OldClass::OldClass(const class FObjectInitializer& PCIP)

{

}

 

// error C2084 : NewClass::NewClass 함수가 이미 본문에 있습니다.

NewClass::NewClass(const class FObjectInitializer& PCIP)

{

}

 

GENERATED_BODY() 를 사용할 경우 UnrealBuildTool 에서 자동으로 constructor 를 declaration & define 해주는 코드를 생성해서 발생한 문제였다. Class 선언에 constructor 를 명시적으로 해주면 상관없는 문제였다.

 

UCLASS()

class NewClass : public UObject

{

GENERATED_BODY()

 

NewClass(const class FObjectInitializer& PCIP);

};

 

// cpp

 

// error C2084 : NewClass::NewClass 함수가 이미 본문에 있습니다.

NewClass::NewClass(const class FObjectInitializer& PCIP)

{

}

 

GENERATED_BODY 가 뭐 몇몇 향상이 있어 사용하라고 하니 앞으로는 GENERATED_BODY 를 이용해야겠다.

 

참고 :

언리얼 4.6 릴리즈 노트

C2084 관련 오류 답변

728x90



아이폰을 윈도우즈 PC에 USB로 연결하면 탐색기에 휴대용 장치로 잡혀서 사진에 접근할 수가 있다. 그런데 어느날 부터 탐색기에서 잡히지 않는 문제가 발생했다.


인터넷 검색을 해보니 iTunes 나 Apple Mobile Device Support 쪽 문제일 수 있다고 해서 iPhone 드라이버 수동 설치까지 해봤지만 문제가 해결되지 않았다. 


(참고 : iPhone, iPad 또는 iPod 이 Windows 용 iTunes 에서 인식되지 않음 )


다른 사람들은 iTunes 에서만 인식이 안되는데 내 PC에서는 탐색기에서만 안보이는 상황이었다. 그리고 Apple Mobile Device Support 를 제거하면 탐색기에서는 보이지만 iTunes 에서 사용할 수가 없었다.


여러번 재설치를 했더니 이제는 iTunes 설치 시에 Apple Mobile Device Support 서비스에 접근 오류까지 발생해서 윈도우까지 망가졌구나 생각했다.


그런데 다음 날 윈도우를 재설치하고 아이튠즈를 설치하는데 어제와 동일한 서비스 접근 오류가 발생했다. 클린 설치인데 문제가 발생하는게 아이폰 인식 오류가 아니라 아이튠즈 문제 같아 보였다.


iTunes 12.2 버전 이후 설치 오류가 빈번하게 발생하고 있나 보다. 해결방법은 12.1 버전을 받아서 설치하면 되나보다. (URL : https://support.apple.com/downloads/itunes)

(참고 : http://it.hunhan.kr/602)


일단 해결은 했는데 새 버전 iTunes 나오면 어떻게 해야 하나 싶다. 버전 올리면 iTunes 파일 포맷도 바뀌어서 구 버전에서 인식이 안되서 플레이 리스트 다 날아가는데 ...


뭐 어쨌든 지금은 12.1 버전 설치 후 잘 돌아가고 있는 상태다. 


(2015.09.18) iOS9 설치하니 iTunes 12.1에서 iPhone 이 인식이 안된다. 불안해하며 12.3 으로 업데이트 했는데 윈도우 10이라 그런지는 모르겠지만 인식이 잘 된다. :)


728x90

UE4 command로 stat fps 를 입력하면 화면에 프레임 정보가 fps, ms 로 화면에 표시된다. 해당 정보를 가져와서 사용하고 싶은 경우 아래와 같이 선언하고 사용하면 된다.


extern ENGINE_API float GAverageFPS;


728x90

+ Recent posts