'분류 전체보기'에 해당되는 글 302건
- 2009.09.15 자료형 크기
- 2009.09.14 waining LNK4070: /OUT 해결하기
- 2009.09.13 타이틀바가 없는 다이얼로그 만들기
- 2009.08.25 Microsoft DirectX 9.0 문서
- 2009.05.27 findwindow 사용법(VB , C++)
- 2009.03.23 Error: Server sent unexpected return value (403 Forbidden) in response to MKACTIVITY 2
- 2009.03.12 USES_CONVERSION
- 2009.03.11 unlocker 강제파일삭제프로그램
- 2009.02.26 공기정화식물(소형) - 히아신스
- 2009.02.26 공기정화식물(소형) - 미니금사철
ProjectName.exp :
warning LNK4070: /OUT:ProjectName.dll directive in .EXP differs from output filename "ProjectNameD.dll"; ignoring directive
원인 :
상기 경고는 DLL ProjectSetting 에서 Output file name 을 바꾸면 나타나는 현상입니다.
( ProjectName.dll -> ProjectD.dll )
.def 파일의 내용중에 아래 와 같이 ProjectName.dll 로 되어있어서
.exp 파일과 결과물이 달라서 발생하는 현상입니다.
해결방법 :
ProjectName.def 파일을 하나 복사해서 아래와 같이 수정합니다.
-----------------------------------------------------------------------------------
LIBRARY : ProjectName
----------------------------------------------------------------------------------
항목을
----------------------------------------------------------------------------------
LIBRARY : ProjectNameD
----------------------------------------------------------------------------------
이렇게 수정합니다.
그리고 Project Setting -> Link -> Category:General -> Project Options : /def:ProjectNameD.def
로 수정하시면 됩니다.
warning LNK4070: /OUT:ProjectName.dll directive in .EXP differs from output filename "ProjectNameD.dll"; ignoring directive
원인 :
상기 경고는 DLL ProjectSetting 에서 Output file name 을 바꾸면 나타나는 현상입니다.
( ProjectName.dll -> ProjectD.dll )
.def 파일의 내용중에 아래 와 같이 ProjectName.dll 로 되어있어서
.exp 파일과 결과물이 달라서 발생하는 현상입니다.
해결방법 :
ProjectName.def 파일을 하나 복사해서 아래와 같이 수정합니다.
-----------------------------------------------------------------------------------
LIBRARY : ProjectName
----------------------------------------------------------------------------------
항목을
----------------------------------------------------------------------------------
LIBRARY : ProjectNameD
----------------------------------------------------------------------------------
이렇게 수정합니다.
그리고 Project Setting -> Link -> Category:General -> Project Options : /def:ProjectNameD.def
로 수정하시면 됩니다.
다이얼로그에서 타이틀바를 제거 하기위해서 함참동안 해매였습니다.
사실전에 알고있었는데 기억이 잘안나서 고생을 했습니다.
그래서 제 블로그에 기록해 놓을려구요.
먼저 다이얼로그의 속성에서 Border 를 None으로 바꾸고
(Title bar 와 System menu 가 언체크됩니다.)
그리고 소스상의 OnInitDialog() 에서
아래를 추가합니다.
// 작업표시줄에 표시하고자 하는 문자열 지정.
SetWindowText("title);
// WS_SYSMENU 스타일을 추가한다.
ModifyStyle(0, WS_SYSMENU | WS_MINIMIZEBOX,0);
위내용은 삽입하는 이유는
1.작업표시중에 Title 를 추가
2.종료기능을 위하여 WS_SYSMENU 를 추가 (작업표시줄에서 마우스오른쪽버튼)
3.최소화기능을 위하여 WS_MINIMIZEBOX 를 추가 (작업표시줄에서 마우스오른쪽버튼)
사실전에 알고있었는데 기억이 잘안나서 고생을 했습니다.
그래서 제 블로그에 기록해 놓을려구요.
먼저 다이얼로그의 속성에서 Border 를 None으로 바꾸고
(Title bar 와 System menu 가 언체크됩니다.)
그리고 소스상의 OnInitDialog() 에서
아래를 추가합니다.
// 작업표시줄에 표시하고자 하는 문자열 지정.
SetWindowText("title);
// WS_SYSMENU 스타일을 추가한다.
ModifyStyle(0, WS_SYSMENU | WS_MINIMIZEBOX,0);
위내용은 삽입하는 이유는
1.작업표시중에 Title 를 추가
2.종료기능을 위하여 WS_SYSMENU 를 추가 (작업표시줄에서 마우스오른쪽버튼)
3.최소화기능을 위하여 WS_MINIMIZEBOX 를 추가 (작업표시줄에서 마우스오른쪽버튼)
http://www.telnet.or.kr/sec_directx/
한글이라서 좋아요^^
한글이라서 좋아요^^
로그를 보니 이글에 대한 검색이 많더군요.
그래서 기존의 VB(비베)에 C++ 관련 정보도 추가해보았습니다.
------------------------------------------------------------
오늘 이것때문에 시간을 너무 많이 소비하였다.
사실 알고보면 이것때문에 오히려 개발시간이 단축된건 사실이다.
인터넷 요기조기를 돌아보고 삽질을 한결과 알아낸 사실 몇가지를 기록하겠습니다.
일단 findwindow 가 머냐면...
여러가지 용도로 쓰겠지만
제가 사용한 목적은 특정 프로그램이 실행중인가를 알아내기 위해서입니다.
가령 B 라는 프로그램이 실행중인지 아닌지 A라는 프로그램이 알아내기 위해서입니다.
이것또한 자세히 들어가보면 저는 한프로그램에서 (VB) shell 명령어로
두 프로그램을 실행시키는데 순차적으로 실행이 되어야됩니다.
나중에 해당기능이 완성되면 별도의 글로 정리를 하겠지만
카트라이더 처럼 런처를 만들려고 합니다.
일단 프로그램이 설치되어있는가 확인후 만일 없거나 버젼이 다른경우
설치프로그램을 다운로드하고 설치를 한후에
프로그램을 실행시키는 방식입니다.
서론이 넘길었군요.
머 아는것도 별로 없는게 말만 많았습니다.
일단 vb에서 findwindow를 사용하기 위해서는 API를 선언해야합니다.
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
그리고 해당 프로그램의 class 명이나 caption 값을 알아야하는데
어떻게 하느냐면. caption는 의외로 간단합니다.
프로그램을 실행시키면 가장상단에 있는것 있죠?
브라우져를 예로 들면 <title>...</title> 부분입니다.
그런데 class 명을 알고 싶거나 caption 값이 이상하게 안된다? 하면
C++ 를 깔면 같이 깔리는 spy++ 이라는 프로그램을 실행시킨후에
Ctrl + F 를 누른후 + 라로 마치 과녁같이 생긴것을 해당프로그램에
드래그 드롭을 하면 관련정보가 주르륵 나옵니다.
여기서....
제가 가장 시간을 잡아먹은 부분입니다.
Dim lngHwnd As Long '프로세스 확인
Private Sub Form_load()
lngHwnd = FindWindow(vbNullString, "Sample App")
'MsgBox lngHwnd
If lngHwnd = 0 Then
Timer1.Enabled = False
executeFcs
Else
chkInstall
End If
End Sub
위에 코드중에서 이부분
lngHwnd = FindWindow(vbNullString, "Sample App")
첫번째인자가 Class명입니다.
두번째인자가 caption값이구요...
class 명을 모르면 vbNullString 이런식으로 넣으면 되구요
반대인경우에는 caption 값에 vbNullString 를 넣는 식으로
하시면 됩니다.
정상적으로 다른 프로그램이 실행중이면 Hwnd 값이 나오고
실행중이 아니면 0 이 반환됩니다.
그런데 왜 시간을 소비했냐면 물론 전제적으로 프로그램이 잘안되서
이것저것 만지다보니 이렇게도 해보고 저렇게도 해보다가
코드가 뒤죽박죽....머이런 식이었습니다.
C++ 에서는
HWND hWnd;
hWnd = FindWindow( NULL,"Sample App");
위의 설명과 똑같이
첫번째 인자는 클래스이름이고
두번째 인자는 윈도우이름입니다(caption).
if(hWnd)
{
SetForegroundWindow((HWND)(((DWORD)hWnd) | 0x01));
return 0;
}
위에 코드는 클래스이름 또는 윈도우 제목이 일치하는 윈도우를 찻았다면
SetForegroundWindow 함수를 사용하여 그 윈도우가 활성 윈도우가 되게 하는 코드입니다.
그럼....오늘도 행복한 프로그래밍 하세요.
저도 행복한 프로그래밍을 하도록 노력하겠습니다.^^;
그래서 기존의 VB(비베)에 C++ 관련 정보도 추가해보았습니다.
------------------------------------------------------------
오늘 이것때문에 시간을 너무 많이 소비하였다.
사실 알고보면 이것때문에 오히려 개발시간이 단축된건 사실이다.
인터넷 요기조기를 돌아보고 삽질을 한결과 알아낸 사실 몇가지를 기록하겠습니다.
일단 findwindow 가 머냐면...
여러가지 용도로 쓰겠지만
제가 사용한 목적은 특정 프로그램이 실행중인가를 알아내기 위해서입니다.
가령 B 라는 프로그램이 실행중인지 아닌지 A라는 프로그램이 알아내기 위해서입니다.
이것또한 자세히 들어가보면 저는 한프로그램에서 (VB) shell 명령어로
두 프로그램을 실행시키는데 순차적으로 실행이 되어야됩니다.
나중에 해당기능이 완성되면 별도의 글로 정리를 하겠지만
카트라이더 처럼 런처를 만들려고 합니다.
일단 프로그램이 설치되어있는가 확인후 만일 없거나 버젼이 다른경우
설치프로그램을 다운로드하고 설치를 한후에
프로그램을 실행시키는 방식입니다.
서론이 넘길었군요.
머 아는것도 별로 없는게 말만 많았습니다.
일단 vb에서 findwindow를 사용하기 위해서는 API를 선언해야합니다.
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
그리고 해당 프로그램의 class 명이나 caption 값을 알아야하는데
어떻게 하느냐면. caption는 의외로 간단합니다.
프로그램을 실행시키면 가장상단에 있는것 있죠?
브라우져를 예로 들면 <title>...</title> 부분입니다.
그런데 class 명을 알고 싶거나 caption 값이 이상하게 안된다? 하면
C++ 를 깔면 같이 깔리는 spy++ 이라는 프로그램을 실행시킨후에
Ctrl + F 를 누른후 + 라로 마치 과녁같이 생긴것을 해당프로그램에
드래그 드롭을 하면 관련정보가 주르륵 나옵니다.
여기서....
제가 가장 시간을 잡아먹은 부분입니다.
Dim lngHwnd As Long '프로세스 확인
Private Sub Form_load()
lngHwnd = FindWindow(vbNullString, "Sample App")
'MsgBox lngHwnd
If lngHwnd = 0 Then
Timer1.Enabled = False
executeFcs
Else
chkInstall
End If
End Sub
위에 코드중에서 이부분
lngHwnd = FindWindow(vbNullString, "Sample App")
첫번째인자가 Class명입니다.
두번째인자가 caption값이구요...
class 명을 모르면 vbNullString 이런식으로 넣으면 되구요
반대인경우에는 caption 값에 vbNullString 를 넣는 식으로
하시면 됩니다.
정상적으로 다른 프로그램이 실행중이면 Hwnd 값이 나오고
실행중이 아니면 0 이 반환됩니다.
그런데 왜 시간을 소비했냐면 물론 전제적으로 프로그램이 잘안되서
이것저것 만지다보니 이렇게도 해보고 저렇게도 해보다가
코드가 뒤죽박죽....머이런 식이었습니다.
C++ 에서는
HWND hWnd;
hWnd = FindWindow( NULL,"Sample App");
위의 설명과 똑같이
첫번째 인자는 클래스이름이고
두번째 인자는 윈도우이름입니다(caption).
if(hWnd)
{
SetForegroundWindow((HWND)(((DWORD)hWnd) | 0x01));
return 0;
}
위에 코드는 클래스이름 또는 윈도우 제목이 일치하는 윈도우를 찻았다면
SetForegroundWindow 함수를 사용하여 그 윈도우가 활성 윈도우가 되게 하는 코드입니다.
그럼....오늘도 행복한 프로그래밍 하세요.
저도 행복한 프로그래밍을 하도록 노력하겠습니다.^^;
Error: Server sent unexpected return value (403 Forbidden) in response to MKACTIVITY
프로그래밍/기타 2009. 3. 23. 14:38회사에서 업무용으로 SVN을 사용하고 있습니다.
계정을 등록하고 CheckOut를 하고 update를 하면서 작업을 하고는
commit를 하려하니 위의 제목과 같은 에러가 나면서 commit이 안되는 겁니다.
네이버등의 한국사이트에서는 정보를 얻을수가 없어서
구글에 들어가서 검색을 해보니 역시나 정보를 얻을수가 있었습니다.
잘못하는 영어실력이라서 한번에 이해가 되지않아 두세번 읽으니 이해가 되더군요.
사실 간단한 내용이였는데...ㅡㅡ;
역시 영어가 중요하다는걸 새삼 깨닮게 되었습니다.
저장소주소를 잘확인해 보라는 겁니다.
예를 들어
My URL: http://svn.foobar.com/foobar
이라고 저장소 주소를 적여놨는데
사실은
My URL: http://svn.foobar.com/FooBar
라는 식입니다.
결국 대소문자가 다르면 업데이트(read)를 되지만 케밋(writer)은 안된다는 겁니다.
차~암 쉽죠...잉....
계정을 등록하고 CheckOut를 하고 update를 하면서 작업을 하고는
commit를 하려하니 위의 제목과 같은 에러가 나면서 commit이 안되는 겁니다.
네이버등의 한국사이트에서는 정보를 얻을수가 없어서
구글에 들어가서 검색을 해보니 역시나 정보를 얻을수가 있었습니다.
잘못하는 영어실력이라서 한번에 이해가 되지않아 두세번 읽으니 이해가 되더군요.
사실 간단한 내용이였는데...ㅡㅡ;
역시 영어가 중요하다는걸 새삼 깨닮게 되었습니다.
Subversion, MKACTIVITY, and 403 forbidden Headaches
내용인즉슨저장소주소를 잘확인해 보라는 겁니다.
예를 들어
My URL: http://svn.foobar.com/foobar
이라고 저장소 주소를 적여놨는데
사실은
My URL: http://svn.foobar.com/FooBar
라는 식입니다.
결국 대소문자가 다르면 업데이트(read)를 되지만 케밋(writer)은 안된다는 겁니다.
차~암 쉽죠...잉....
Wide Char 와 ANSI 사이의 변환을 간편하게 해주는 매크로입니다.
매크로 | 인자 | 결과 |
A2CW | LPCSTR | LPCWSTR |
A2W | LPCSTR | LPWSTR |
W2CA | LPCWSTR | LPCSTR |
W2A | LPCWSTR | LPSTR |
T2COLE | LPCTSTR | LPCOLESTR |
T2OLE | LPCTSTR | LPOLESTR |
OLE2CT | LPCOLESTR | LPCTSTR |
OLE2T | LPCOLESTR | LPCSTR |
예)
USES_CONVERSION;
TCHAR widechar[]=L"sample";
char ansichar[10];
ansi = w2a(widechar);
파일을 삭제하려고 할때 권한이 없다던지 다른프로세스가 사용하고 있다는 이유로
삭제가 거부되는 일이 있습니다.
그럴때 이프로그램이 깔려있으면 삭제가 가능합니다.
추가적으로 어떤프로세스가 이파일을 사용하고있는지의 정보도 알수있습니다.
만일 그냥 강제로 삭제하면 컴퓨터에 무리가 가지않을까하는 생각이 든다면
강제로 종료하는것이 아니라 그프로세스를 종료하거나 한다음 파일을 삭제하는 식으로
처리하면 안전하게 파일을 삭제할수있습니다.
http://www.emptyloop.com/unlocker/
삭제가 거부되는 일이 있습니다.
그럴때 이프로그램이 깔려있으면 삭제가 가능합니다.
추가적으로 어떤프로세스가 이파일을 사용하고있는지의 정보도 알수있습니다.
만일 그냥 강제로 삭제하면 컴퓨터에 무리가 가지않을까하는 생각이 든다면
강제로 종료하는것이 아니라 그프로세스를 종료하거나 한다음 파일을 삭제하는 식으로
처리하면 안전하게 파일을 삭제할수있습니다.
http://www.emptyloop.com/unlocker/