블로그 이미지
ChocoTart

Notice

Recent Post

Recent Comment

Recent Trackback

Archive

calendar

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
  • total
  • today
  • yesterday
2013. 11. 26. 11:46 MapTool


* 목적 
DirectX 를 이용한 C++ StaticLibrary 를 이용하여 C#으로 툴을 만들기 위해서
C++ Library를 DLL로 만들어 이를 C# WinForm 환경에서 연동하여 사용해보자

1 준비


( ABaseCoreDX10, KMapDX10  <-- StaticLibray 프로젝트 이고 , CLRLIB <-- DLL 생성 프로젝트 , Sample 은 StaticLibray Test 프로젝트 , MapTool <-- C# winform 프로젝트)

1) C++ Library 준비
정적 라이브러리가 준비 되어야 한다 
2) Test를 위한 Sample 프로젝트도 만들자 (C++ Win32)

3) Dll을 만들기 위한 프로젝트를 만들자

 (C++ 탭에서 ClassLibrary 선택하여 프로젝트 생성)

4) C#의 WinForm 환경으로 실질적으로 Tool 이 될 프로젝트생성


2. DLL 생성

1) 간단히 라이브러리가 잘 돌아가는지 Sample 에서 테스트를 해보자

이상 없이 렌더링 되고 있다.


2 ) DLL을 만들어보자

-사전작업

<1> 헤더파일 연결

추가 포함 디렉토리에 연동할 라이브러리 헤더파일 폴더를 지정해준다.

<2> Lib 폴더 연결

추가 라이브러리 디렉토리에 

lib 파일이 있는 폴더 연결

<3> lib 파일 연결

연동하여 사용할 lib 파일들을 추가 종속성에 넣어준다.

<4> Library 폴더의 변경이 그대로 반영되어 DLL 프로젝트가 빌드 되도록 프로젝트 종속성을 해주자

해당 프로젝트의 우클릭시 프로젝트 종속성이라고 나올 것이다.

(Library 프로젝트의 변경도 없는대 매번 Library  프로젝트 까지 재 빌드 되어 컴파일 시간이 길어 진다면 잠깐 프로젝트 종속성을 끊어도 무방하다 )

(필자의 경우 KMapDX10 만 종속성 체크를 했는대 KMapDX10 은 ABaseCoreDx10에 종속 되어잇어 

결과적으로 DLL 프로젝트를 빌드시 전부다 빌드가 된다.)




3) 코딩 

<1> WrapClass 만들기

C# 환경에서는 C++내용을 쓰지 못하기에 해당 내용 

즉 라이브러리의 내용을 Wraping 하여 DLL로 만들고 이를 C# 윈폼 환경으로 쓰기위해

WrapClass를 만든다 

(위 내용은 필자가 여기저기 참고하다가 지 멋대로 해석하여 알게된 내용으로 잘못된 내용일 가능성이 다분함)


<2> 함수내용 구현 (기본적인 초기화 함수)


필자의 라이브러리 는 윈도우를 초기화하고 해당윈도우로 디바이스를 생성 후 이것저것 초기화후 

Run 하여 돌린다 

이때 우리는 필요 없어진 것이 윈도우 이다 이 윈도우를 대체할게 C# winform 인것이다 

때문에 c# winform 에서 윈도우 핸들과 인스턴스를 가져와서 이를 사용하여 디바이스 생성등을 하여

프로젝트가 실행되면 Winform 윈도우에 렌더링 이 된다.

따라서 Initialize() 함수는 핸들과 인스턴스를 받아서 ( INT_PTR로 받는것은 C# 윈폼환경에 HWND, HINSTANCE가 없기에  그렇다  ) 그 값들을 캐스팅하여 넣어주고

Run 함수로 초기화 및 메인루프를 돌려준다.



4. C# Winform 작업

1) 사전작업

해당 프로젝트 역시 프로젝트 종속성을 해준다 물론 DLL 프로젝트와 연결 시켜준다.

하위에 있는 참조 폴더에 우클릭후 참조추가 버튼을 눌러 프로젝트 탭에서 DLL 프로젝트를 추가해준다.

(추가시 참조에 CLRLIB(DLL프로젝트) 이 추가 된것을 확인 할수 있다. )



해당 프로젝트에서 아래의 

안전하지 않은 코드 허용 

비관리코드 디버깅사용을 체크하여야

Tool 디버깅시 C++내용 즉 라이브러리 소스까지 들어가 확인 할수있다.


2) 코딩

-Program.cs 에서 원래 내용을 수정하자

Initialzie() 함수는 사용자 정의 한 함수이다 . ( C#내에서)


- Form1.cs에서 함수 내용을 넣어주자.

해당 윈폼의 핸들을 넘겨준다.



이제 전체 빌드하면 Winform 환경에 렌더링이 된다


필자의 경우 fx파일 ( Shader파일을 로드할때 경로에 대한 에러가 계속 발생했는대 정확한 원인을 몰라 절대 경로를 넣었다.

절대 경로의 경우 ('\') 를 ('/') 로 바꿔줘야한다.

( 추가 작업중 경로에 대한 문제는 EXE파일의 경로를 기준으로 상위폴더로 바꾸니 잘되었다 )






posted by ChocoTart
2013. 11. 24. 18:52 Computer/O.S

* 목적- 컴퓨터 부팅시 부팅과 같이 시작되버리는 몇몇 프로그램들을 없애보자.


- 필자의 경우 steam, pc kakao Talk, MK LOL 등등이 부팅되자마자 켜지는게 귀찮다

컴을 키자마자 그러한 프로그램들이 필요한게 아니기에

컴퓨터가 부팅되자마자 그 프로그램들을 끄기 바쁘다


따라서 이러한 프로그램들을 부팅과 동시에 시작되지않게 설정해보자

( 해당 프로그램 설치시 설정항목에서 잘 선택했다면 

이러한 수고를 덜 수도 있다)



1. 윈도우버튼 + R 키를 누르면 -> 실행창이 뜰것이다

( 윈8 의 경우 윈도우 키를 누르고 실행이라고 쳐도 실행창 바로가기가 나올것이다 

다른 윈도우 환경에선 시작 프로그램중에 실행 항목이 있을 것이다.)


2.실행창 타이핑 란에 msconfig 라고 치고 확인 버튼을 누른다 


3. 그러면 아래 와  같은 창이 하나 뜨는대 이 창에서 시작프로그램 탭을 누른다 

다른 윈도우 환경에서는 해당 탭에서 바로 항목이 보이는걸로 알고있는대 필자는 win8을 사용중이라 바로 보이지 않는다.

이때는 가운대 에 있는 작업관리자 열기 를 눌러주면 된다 





4. 그러면 아래 와 같은 창이 뜨는대 이 창에서 자신이 부팅시 같이 실행되지 않길 원하는 포그램을 우클릭후 사용안함이라고 체크하면된다 필자는 steam 을 우클릭으로 사용안함으로 하고 확인을 누르니 해당 프로그램의 상태가 사용안함으로 바뀐 걸 확인할수 있다 .


이창에서 해당 프로그램이 부팅과 같이 실행되는지 상태로 확인할수 있고 같이 실행될시 영향을 얼마나끼치는지도 간단히 확인할수 있다. 




* 마치며 - 간단히 이렇게 설정을하면 부팅속도도 더빠르고 작업환경도 더 쾌적해질수 있을 것이다.

( 필자가 해본건 win8 에서 해본 것이라 다른 버전의 window os 에서는 조금 다를 수있다 . )


posted by ChocoTart