Source Insight를 아직 버리지 못하는 이유가 몇몇 있지만 그 중에

Visual Studio에서 마우스 4, 5버튼으로 backward, forward 기능이 되도록 하는 것을 찾았다.


이 방법이 없진 않을 텐데 찾기도 애매해서 그냥 쓰다가 드뎌 찾았다.

도저히 외워지지 않는 단축키로는 성에 차지 않아서 구글링으로 마구마구 검색했더니 드뎌 찾았다.


http://visualstudiogallery.msdn.microsoft.com/87fb8c65-d1db-49e9-a068-d62a222a4ae7/view/Reviews




이 기능을 공식적으로 뭐라 불러야 할지 몰랐다. 그리고 마우스의 4, 5 버튼이라는 것도 공식적인 이름 같지는 않지만 

내 맘대로 이렇게 이름 지었다.


여튼 이걸 down 받고 나서 실행하면 visual studio 에 찰싹 달라 붙어서 기능이 동작할 것이다.

vs 2010 부터 기능이 있었나 본데 참 검색하기 애매해서 이제야 발견했다.


그리고 C/C++ 을 다시 사용하니 이런걸 보게 되는군.


이 기능 강추다. 소스 인사이트 써본 사람들은 알꺼임.


이제 Eclipse도 되면 좋을 텐데 누구 아는사람?


Posted by 없다캐라

이번 프로젝트에서 TFS 2010을 소스형상관리로 사용해보려고 설치해보았다.

Visual Studio 2010 공식 팀 블로그의 글을 참조하여 설치하였다. (링크)

TFS 2010 을 사용하기에는 Visual Studio 2010 이 좋다.

별 다른 패치 없이 Team Explorer를 사용하면 될 뿐이다.


그런데 Visual Studio 2008은 몇가지 손을 좀 추가하여야 한다. 그것을 기술하려고 한다.


먼저, 내가 했던 것은

1. Visual Studio Team Explorer 2008 설치 (링크)

2. Visual Studio 2008 Service Pack 1 설치 (링크)

3. Visual Studio Team System 2008 Service Pack 1 Forward Compatibility Update for Team Foundation Server 2010  패치 (링크)


위의 순서대로 하였다.

이렇게 한것은 링크1, 링크2 을 참조하였던 것이다.


그런데 2008에선 문제가 있다.

TFS Collector URL이 http://주소:8080/tfs/DefaultCollector 이라면 포트 번호뒤의 /tfs/DefaultCollector 를 입력할 수 있는 방법이 없다.


그렇다고 Server name입력하는 곳에 왕창 다 넣을 수도 없다. 해보면 안다. 에러난다.


그래서 구글링으로 그나마 해답을 찾은 것이 레지스트리를 건드려서 미리 Collector (Repository 서버 URL) 을 미리 입력해서 넣어 두는 방법이다. (링크)

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\TeamFoundation\Servers

에 가서 Collector 할 이름 하나 스트링 형태로 만들고 그 안에 내용을 fullname 으로 입력해주면 된다.



이렇게 해준 후에야 Visual Studio 2008 에서도 TFS 에 접속할 수 있게 되었는데 Visual Studio 2010 과는 약간 달리 권한에서 약간 손을 또 봐줘야 하나보다. 안되는 점이 있었는데 이거까지 수정하기 귀찮아서


그냥 팀원들에게 우리꺼 Visual Studio 2010 으로 가자라고 공지하고 그냥 맘편하게 쓰련다.

괜히 뻘짓했다.



Posted by 없다캐라
별건 아닌데 거참. 담에 또하려면 분명 까먹을 테고

이걸로 기초 지식 습득하고 보자.

SYSTEM_INFO siSysInfo;

GetNativeSystemInfo(&siSysInfo);

printf("  Processor Architecture %d\n", siSysInfo.wProcessorArchitecture );


내가 이걸 쓴 이유가 GetSystemInfo를 쓸까봐서이다.

실제 2003 x64에서 해보니 GetSystemInfo는 0 값을 return 하더라. 그러니깐 x86 이란 말이쥐.
따라서 정확하게 구할려면, GetNativeSystemInfo 으로 쓰자. 아마 WINVER 501 이상부터 가능했던 것 같은데.

Posted by 없다캐라
우리 제품중 Windows 2003 x64에서 문제가 생겼다.

범인은?

간단히 설명하면
::LoadLibraryEx("C:\\WINDOWS\\System32\\drivers\\acpi.sys", 0, LOAD_LIBRARY_AS_DATAFILE);

이것이 실패하였고 파일이 존재하지 않는다는 GetLastError() 에서 알려준다.
하지만 저 경로에 acpi.sys 는 분명 있다. 이것은 Wow64 기능 지원을 위해 저 경로는 SysWow64로 돌려버리는 redirection 때문이다.

더 간단히 예제를 설명하면 이 코드로 테스트 해보면 알 수 있다.
if( 0 == _waccess_s(_T("C:\\WINDOWS\\System32\\drivers\\acpi.sys"), 0) )
{
    printf("exist\n");
}

젠장.

이것을 해결하기 위해서는 Wow64DisableWow64FsRedirection 으로 redirection을 잠시 꺼두고 필요한 로드 작업을 수행 후 다시 revert 하여 사용하면 된다.

if( Wow64DisableWow64FsRedirection(&OldValue) ) 
{
    if( 0 == _waccess_s(_T("C:\\WINDOWS\\System32\\drivers\\acpi.sys"), 0) )
    {
        printf("exist\n");
    }


    if ( FALSE == Wow64RevertWow64FsRedirection(OldValue) )
    {
        printf("Wow64RevertWow64FsRedirection failed\n");
    }
}
System32를 가르킬 땐 SysWow64로 접근하지 않고 System32로 접근이  가능해진다.

여기서 약간 주의할 점으로는

Wow64DisableWow64FsRedirection()와 Wow64RevertWow64FsRedirection()은 최소 사용가능 OS 버전이 Windows XP x64 부터이다. 그럼 XP x86은?

그래서 위의 예처럼 직접접으로 사용하지 않고 kernel32에서 load 하여 모듈에서 function을 가져와서 사용한다.

조금더 안정적으로 사용하려면,

...
BOOL bDisabledRedirection = FALSE;
typedef BOOL (WINAPI * LPWOW64FSREDIRECTION)(PVOID *);
...
{
    LPWOW64FSREDIRECTION lpfWow64DisableWow64FsRedirection = NULL;

    HMODULE hModule = LoadLibrary( _T("kernel32.dll") );

    if (hModule)
    {
        lpfWow64DisableWow64FsRedirection = 
            (LPWOW64FSREDIRECTION)GetProcAddress(hModule, "Wow64DisableWow64FsRedirection");

        if (lpfWow64DisableWow64FsRedirection)
        {
            bDisabledRedirection = (*lpfWow64DisableWow64FsRedirection)(&old_value);
        }

        FreeLibrary(hModule);
    }
}

의 형태로 쓰면 된다.






Posted by 없다캐라
환경 :
- Windows 2008 x64
- MS Visual-Studio 2008

간단히 코드를 올리자면

while (1)
{
HMODULE hModule = LoadLibrary ( "C:\\Windows\\servicing\\cbsmsg.dll" );

if ( hModule )
{
FreeLibrary( hModule );
}
else
{
cout << GetLastError() << endl;
}
}

load 함과 동시에 free 를 해주는 구조로 looping을 돌렸다. 

문제는 실제 load는 실패했다. 그래서 hModule은 NULL 을 가지게 되었고 erro code는 아래의 193을 뱉는다.


근데 메모리는 왜자꾸 느냐고? 앙~

이게 debug를 위해 breaking를 걸면 늘지 않는데 그냥 실행시켜버리면 쭉쭉 늘어나버린다.

당분간 진행은 여기서 홀딩 시켜두고 틈틈이 관련있는 내용을 찾아봐야 겠다

http://pallas.egloos.com/1299794 ansi 혹은 유니코드 의 빌드 바이너리의 character set이 다른 경우도 leak가 발생하는 모양인갑다. 내 문제도 이런 경우인가??? 
Posted by 없다캐라
이전버튼 1 2 이전버튼

블로그 이미지
없다캐라

태그목록

공지사항

Yesterday39
Today8
Total187,122

달력

 « |  » 2018.10
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

글 보관함


티스토리 툴바