미셸 트랙튼버그
하우스에서 심장 이식 받았던 환자로 나왔는데
현실에서는 간이식을 받았었구나
가십걸이나 버피더뱀파이어슬레이어 이제 정주행해 볼까...
블로그도 다시 살려 볼까 훠훠
미셸 트랙튼버그
하우스에서 심장 이식 받았던 환자로 나왔는데
현실에서는 간이식을 받았었구나
가십걸이나 버피더뱀파이어슬레이어 이제 정주행해 볼까...
블로그도 다시 살려 볼까 훠훠
MyForm w = new MyForm
IntPtr handle = wnd.Handle; // Exception occurs here
class MyForm : Form { ... }
protected override void WndProc(ref Message m)
{
if(m.Msg == 0x0072)
{
}
// base.WndProc(ref m); // Accidentally removed
}
실수로 base.WndProc 호출 부분을 지워버린 경우
이미 만든 윈도우이지만 핸들 참조 자체가 안 된다.
단순 핸들 참조에도 WndProc이 돌아가는 마법
Handle leak일 리가 없는데 이런 오류를 만난다면 대개 이런 것이다.
C# 7.2부터 쓸 수 있다.
VS 2019 기본 설정으로는 못 쓴다.
예전 MSDN community에서는 그딴 게 왜 필요함? 이러고 있었는데
이럴 때 있으면 좋을 것 같지 않은가?
WndA ctrl1;
WndB ctrl2;
private void menuItem1_Click(object sender, EventArgs e)
{
if (ctrl1== null || ctrl1.IsDisposed)
{
ctrl1= new WndA();
ctrl1.Show();
}
else { ctrl1.BringToFront(); }
}
private void menuItem2_Click(object sender, EventArgs e)
{
if(ctrl2==null || ctrl2.IsDiposed)
{
ctrl2 = new WndB();
ctrl2.Show();
}
else { ctrl2.BringToFront(); }
}
public static void OpenSingletonWindow<T>(this ref T c) where T : Control, new()
{
if(c==null || c.IsDisposed) {c=new T(); c.Show();}
else { c.BringToFront(); }
}
Extension method는 null에서도 잘 실행되니까(virtual call이 아님: Stackoverflow)
Control c = null;
c.OpenSingletonWindow();
해도 잘 실행됐을 것이다(this ref가 가능했다면).
Extension method 없이 static class로 하면
SomeUglyStaticClassName.OpenSingletonWindow(ref ctrl);
이렇게 한다. 쓰고 보니 별 차이가 없긴 하다.
굳이 못하게 막아놓은 이유는 또 뭐람
요약: Short-circuit 당해서 그냥 step into 안 해버리는 경우가 있다.
원래 이랬던 프로그램을
void f1() { /* do something */ }
void f2() { }
void f3() {}
void f() {f1(); f2(); f3(); }
이것을 각 단계 별로 실행하다 한 번이라도 실패하면 바로 중단하기 위해서 bool을 리턴하게 바꿨다:
bool f1r() { /*Side effects*/ if(...) return true; else return false; }
bool f2r() { /*Side effects*/ if(...) return true; else return false; }
bool f3r() { /*Side effects*/ if(...) return true; else return false; }
그리고 중간에 모종의 이유로,
일단 f1, f2, f3를 무조건 다 실행시키고 b값을 마지막에 비교하기로 계획을 바꾼다(if(!b) return 주석화).
void f() {
bool b = f1();
// if(!b) return;
b = b && f2();
// if(!b) return;
b = b && f3();
// if(!b) return;
// Do rest
}
그랬더니 f2, f3가 실행되지 않았다. 그래서 디버깅을 했더니 step into가 먹히지 않는 것이다!
f1, f2, f3가 위치한 행에서 step into (F11)를 시도하면 break point를 무시한다. f1/f2/f3 내부에 break point를 둬도 무시한다.
그리고 더 무서운 것은 이것이 "intermittent"하게 일어난다는 것이다.
(사실 b = false일 때만 무시되는 것)
Visual studio 임시 파일 지우고 이것저것 해 보기 전에...
* 다른 함수에 대해서는 step into가 잘 작동하는 지 확인해 보자.
* 함수의 반환값은 무적권 별도의 변수로 저장하는 게 디버깅하기에 좋다.
* 원래의 의도와 다르게 뭔가를 사용할 때는 문제가 생기기 쉽다(...)
예전에도 이거 당했는데 또 당하면 매우 억울하다. 하하
외부 코드에서 ctrl-C ctrl-V로 가져온 경우에
OwnerDraw가 true가 아닌 지 확인해 보자. false로 바꾸면 잘 나올 것이다.
OwnerDraw==true인 경우 DrawColumnHeader, DrawItem, DrawSubItem events에 대한 handers 구현해야 한다.
Item/SubItem은 대개 스스로 구현하겠지만 header에 대해서는 default로 충분할 텐데,
private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
e.DrawDefault = true;
}
이전 프로젝트에서 OwnerDraw를 구현해 뒀다가 오랜만에 꺼내서 쓰려고 할 때 이런 일이 생길 수 있다.
그 밖에 흔히들 하는 실수는
* View property가 Details로 맞춰져 있지 않은 경우
* listView1.Items.Clear() 하지 않고 listView1.Clear() 해 버리는 경우
등이 있다.
파일 탐색기 옵션에서 '미리 보기에 파일 아이콘 표시' 항목에 체크돼 있다면 해제한다.
기본값이 (미리보기 대신) 아이콘 표시로 바뀐 듯하다.
파일 탐색기 옵션은 제어판 항목 중에도 있고, 탐색기 창의 메뉴(보기 탭 속)에도 있다.
몇 달 간 포기하고 살다가 지금 고침 훠훠
1. 아이튠즈 다운로드
https://www.apple.com/kr/itunes/download/
1-0) 흑우 같이 검정색 Get it from Microsoft 버튼 누르고 스토어 들어가지 말고
1-1) 아래로 내려가서 다른 버전을 찾고 있다면? Windows를 클릭
1-2) 앞의 Get it from MS 버튼이 지금 다운로드하기(64비트) 하늘색 버튼으로 바뀐다.
(위아래로 오르락내리락 하게 만들었다 나쁜놈들...)
1-3) iTunes64Setup.exe 파일이 다운로드된다.
2. 압축 풀기
2-0) 혹시 exe 속을 열어볼 압축 프로그램이 없다면 하나 설치한다(eg, 7-zip).
2-1) 7-Zip Context menu에서 "iTunes64Setup\"에 풀기 선택
2-2) 열어 보면 여러 개가 있는데 이 중 필요한 것은
* AppleApplicationsSupport64.msi
* AppleMobileDeviceSupport64.msi
두 개다(2020년 8월 27일 현재. 예전에는 mobile device support만 설치해도 됐는데 ㅗ).
차례대로 설치(오른쪽 클릭, 설치)한다.
- AppleApplicationSupport64.msi를 설치하지 않으면 Apple Mobile Device Service 서비스가 시작하지 않는다.
2-3) Windows 재시작이 필요하다.
3. iPhone Wifi 끄고 핫스팟 켜고 PC에 연결하면 유선으로 연결된다.
# 왜 유선으로 연결하느냐 하면
아이폰은 원래 Wifi 핫스팟이 간헐적으로 끊어지기 때문입니다(이 글을 쓴 목적).
원래 그렇게 쓰는 겁니다.
역병 같은 존재 iTunes (Windows 버전)
×
역병 같은 존재 Microsoft Store
= iTunes 전체 설치
하는 흑우 없제?
오래 전에 iPhone을 기울이면(tilt) 아이콘이 살짝 움직이는 업데이트가 있었다. Motion toggle이라고 한다... (Reddit 포스트조차 5년 전이다) https://www.reddit.com/r/jailbreak/comments/gg...