1. 실버라잇에서 접근하는 WCF서비스를 만들때는 반드시 'silverlight 사용 wcf 서비스'로 만든다.

2. 서비스 클래스를 작성한다.

3. web.config에서 <system.serviceModel> 안의 <endpoint address="" binding="basicHttpBinding" contract="DownloadService" /> 부분에서 binding부분이 다르게 되있다면 basicHttpBinding으로 수정한다.
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 가 없으면 추가한다.

4. 실버라잇 프로젝트에서  서비스 레퍼런스 추가하며 앞에 제작한 WCF서비스를 등록한다.

5. 실버라잇 클래스에서 서비스를 이요한다.
EndpointAddress address = new EndpointAddress(new Uri(Application.Current.Host.Source, "../Service.svc"));
client = new ServiceClient(new BasicHttpBinding(), address);
위처럼 client를 가져온후.. client 를 살펴보면, 앞에 작성한 함수들이 비동기버전으로 만들어져 있다.

Posted by orange code

관리자모드로  C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation 로 가서
ServiceModelReg.exe /r /y 를 실행해주면 됩니다.

웹사이트의 처리기매핑 정보가 모두 초기화되니 주의해야합니다..
Posted by orange code


중간 단계 따윈 없이 바로 제작 과정 들어갑니다..

일단 WMP 의 주요 인터페이스는 이렇습니다.
IWMPCore -> 미플 총괄
IWMPControls -> 재생/정지
IWMPPlaylist -> 재생목록
IWMPMedia -> 곡하나
그외에
IWMPPlaylistCollection, IWMPPlaylistArray등이 있는데 특히 이 두개는 이번 플러그인 제작에 쓰였습니다.

제작할 플러그인은 다음곡들을 예약하는 기능이고 이름은 BookMe로 정했습니다.

BookMe 재생목록 만들기&가져오는 함수
일단 플러그인 내에서 이 BookMe 목록은 중요한데요 이 목록을 가져오는 함수인데
m_spCore->get_playlistCollection(&spPlaylistCollection); // 전체 재생목록
spPlaylistCollection->getByName(L"BookMe", &spPlaylistArray); // 이름이 BookMe인것들
spPlaylistArray->get_count(&playlistCount); // 일치하는 재생목록 갯수
if (playlistCount > 0)
    spPlaylistArray->item(0, &spPlaylist); // 처음 재생목록으로 선택
else
    spPlaylistCollection->newPlaylist(L"BookMe", &spPlaylist); // 새로 만듦

이 코드로 미플 재생시 BookMe 재생목록이 바로바로 생기게 되죠..
사용자는 다음에 듣고 싶은곡을 이 재생목록에 추가할테고요...
이제 남은건 현재 재생곡이 끝났을 때, 이 목록에 남은 곡이 있다면 그 곡을 재생하고 BookMe목록에서 지우는겁니다..

플러그인 프로젝트 생성시에 event항목을 체크하면 IWMPEvents를 상속받게 되어서, WMP의 다양한 이벤트에 대해 처리할 수 가 있게 됩니다.. 그중에는 PlayStateChange 함수에서  wmppsPlaying, wmppsMediaEnded 로 재생시작/정지를 알 수 있죠.. wmppsMediaEnded 이벤트가 발생하면 BookMe목록에서 하나 가져와서 재생하면 되는거죠, 근데 중요한것은 IWMPCore나 IWMPControls의 노래변경기능은 현재 재생중인 목록에서 가져온 미디어 객체만 허용하기 때문에, BookMe에서 가져온 객체를 가지고, 현재 재생중인 목록의 미디어들과 비교하면서 파일이 같은 미디어를 찾아서 재생시켜줘야 된다는 것입니다..
또 하나 플러그인을 제작하면서 힘들었던건... wmppsMediaEnded 이벤트 발생시 곡을 멈추고 원하는 곡을 재생하면, wmp가 선택한 노래로 바로 바뀌어 버리는것이었습니다.. 그래서 결국 타이머를 이용한 시간차로 해결했죠.. 자세한건 소스를....
그리고 중요한건 윈도우7에선 관리자모드로 visual studio를 켜야, 컴파일후 플러그인 등록이 됩니다~ 안그럼 에러뜸

Posted by orange code
시험도 끝나고.. 간단한것을 하나 만들기로 했습니다..
리눅스용 프로그램중에 KDE의 AmaroK이 있는데요, 여기에 보면 노래 목록중에서 여러곡을 예약해서 순차/랜덤 재생과는 상관없이 현재 재생되는 곡이 끝나면 예약된 곡들이 순서대로 나오고 그 뒤에 원래 재생방식으로 돌아갑니다. 리눅스를 지우고 윈도우로 들어오면서 미디어 플레이어를 쓰게 됐는데 기능 중에 아쉬운 점이 있다면 이게 그 중 하나지요.. 또 하나라면 폴더별로 분류가 안된다는 점..
어찌됐든 그 기능을 직접 만들고자 SDK를 찾았습니다. WMP(Windows Media Player) SDK는 Windows SDK안에 속해 있고, 저는 윈도우7을 쓰기 때문에 WMP 11을 쓰고 WMP 11 SDK는 Windows SDK for Vista 이상에 포함됐다고 하네요..

윈도우7용 Windows SDK 입니다.. 원래 SDK는 최신유지해야하는법

설치를 할때 꼭 Samples를 포함해서 설치해야합니다.. 그 안에 프로젝트 템플릿이 들어있어요
설치가 완료 됐으면 프로젝트 템플릿을 설치합시다.
C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\multimedia\WMP\Wizards\wmpwiz\wmpwiz.vsz
파일을 엽니다.
Wizard=VsWizard.VsWizardEngine.9.0
Param="ABSOLUTE_PATH = C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\multimedia\WMP\Wizards\wmpwiz"
해당하는 두줄을 위처럼 수정합니다..  vs2005일경우 8.0 으로 하고,  ABSOLUTE_PATH는 이 파일이 들어있는 경로로 sdk가 다른 곳에 설치됐다면 그 주소로 적으면 됩니다.
수정이 다됐다면 이 폴더안의 wmpwiz.ico, wmpwiz.vsdir, wmpwiz.vsz 세파일을 선택하고, visual studio가 설치된 곳에서 vc\vcprojects 를 따라들어가서 세 파일을 복사해오면 끝입니다.

이렇게 뜬다면 성공

Posted by orange code

바탕화면이나, 유저 홈디렉터리, 내음악, 내비디오, 내사진, 쿠키, 인터넷캐쉬 등..
여러 잡다한 시스템 폴더의 주소를 가져올 수 있습니다..

c++로 하시려면
shlobj.h 를 추가하시고
SHGetSpecialFolderPath 를 쓰심 됩니다

c#으로 쉽게 쓰시려면
밑의 소스 참고

Posted by orange code

사실 이 프로그램 명칭을 잘 모르겠다

사람의 눈으로는 보이는 물체와의 거리에 따라 크기가 작고 크게 보이게 된다. Direct3D 도 그렇게 처리하리라 생각하고 있었는데 좀 다른 것 같다.. 예를 들어 카메라가 있고 그 카메라가 보는 방향에 수직인 평면이 있어서, 공간상의 한 물체는 카메라와 어떤 거리만큼 떨어진 평면 위에 위치하게 된다.. 그리고 그 물체는 카메라와 그 물체가 포함된 평면 사이의 거리에 의해 크기가 변형된다. 이게 얼마나 사람이 보는 영상과 차이가 있고 내가 구현한 방식이 사람의 눈과 더 가까운지는 모르겠다.. 오히려 지금 Direct3D의 방식이 더 자연스러워 보일 수 있다.
어찌됐든 카메라로 영상을 찍으면서 생기는 굴곡을 따라 하기 위해 구현한 프로그램이다.

'컴퓨터 프로그래밍 > Direct3D' 카테고리의 다른 글

Direct3D projection Effect  (0) 2009.12.02
[C# + MDX 프로그래밍] HLSL  (0) 2008.12.17
3DS Viewer 만들기 (미완성)  (0) 2008.10.30
Posted by orange code

image

최근 간단한 3D 프로그램을 제작하면서 마우스 휠로 확대/축소 할 수 있는 기능을 넣으려 했다.

……
case WM_LBUTTONUP:
    ReleaseCapture();
    bPressed = false;
    break;

case WM_MOUSEWHEEL:
    break;             (** 여기에 브레이크 포인트 **)
……

기능을 넣기 전에 메시지 파라미터 값을 확인하기 위해 대충 코드를 넣고 브레이크 포인트를 걸어놨는데 휠을 아무리 굴려도 비주얼스튜디오는 반응이 없다. 디버그 모드라 최적화는 안 됐을 테고 디어셈블리로 봐도 분명히 코드가 있는데..  구글에서 WM_MOUSEWHEEL 메시지를 받을 수 없다는 질문들과 답변을 봐도 해결책이 안 보인다. 이상하다 싶어 스파이로 확인해보니.. 메시지가 잘 가네?.. 혹시 하고 메시지박스 하나 넣어보니.. 잘만 뜬다  아씨

Posted by orange code

참 별거 없음.. 대충 오늘 한 거 사인 음파 출력하기~

일단 DirectSound는.. DirectX의 한 요소이고 사운드 입력 출력을 담당합니다..

DirectX는 요새 11버전까지 나왔지만 DirectSound는 8이 최신이네요

XAudio라든가 다른 것들이 있는 듯 하지만 전 잘 모르기 때문에.. 패스

과정은 매우 쉽습니다..DirectSound객체를 만들고 사운드버퍼를 쓸 만큼 만들어서

원하는 시간에 재생시켜주면 끝입니다..

소스

'컴퓨터 프로그래밍 > DirectSound' 카테고리의 다른 글

DirectSound 시작하기 - 1  (0) 2009.10.09
Posted by orange code

1. JDBC를 설치한다..
jdbc는 자바 디비 커넥터 약자로... 자바에서 해당 디비 프로그램에 연결하려면 필요하다
mssql용 jdbc는 http://msdn.microsoft.com/en-us/data/aa937724.aspx 여기에서 받을수 있다..
압축을 푼후 폴더를 열어보면 sqljdbc.jar 와 sqljdbc4.jar 가 나오는데
본인이 jre6.0이상이면 sqljdbc4.jar 를.. 그 이하이면 sqljdbc.jar 를 사용하면 되는데
해당 파일을 jre폴더\lib\ext 에 복사해주면 아주 잘 작동한다.. 둘다 복사하지 말고 자신에 맞는것만 복사하자..

2. 자바 코딩
모든 jdbc 커넥터가 그렇듯.. 일단 드라이버 클래스를 읽어야한다.
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
이 한줄이면 클래스를 찾은후에 드라이버 리스트에 자동등록되게 된다..
원하는 디비에 연결하려면
DriverManager.getConnection("jdbc:sqlserver://서버이름[:포트][;옵션=값[;추가옵션=값]]")
이런 형식을 따르게 된다..
예를 들어 자신컴퓨터에 윈도우계정인증으로 접속할경우
jdbc:sqlserver://localhost;intergratedSecurity=true
자신컴퓨터에 지정된 계정과 비번을 쓸 경우
jdbc:sqlserver://localhost;user=아이디;password=암호
포트가 다를경우
jdbc:sqlserver://localhost:1234;user=아이디;password=암호
대강 이런식으로 하면된다..

이 다음부턴 다른 자바 디비 프로그래밍과 동일하다..

3. 접속이 안될경우.. http://msdn.microsoft.com/ko-kr/library/ms378845(SQL.90).aspx
나의 경우 sql서버 기본포트 1433으로 접속되지 않아 삽질을 했는데
일단 sql서버 설정 관리자에서
SQLServer네트워크구성 -> 프로토콜 -> TCP/IP 를 사용으로 변경해 주고
IP 주소 탭에서, IPALL부분의 TCP포트를 1433으로 직접 적어주어야 sql서버에서 잘 대기하게 된다..
1433가 기본값이라곤 하는데 Visual Stduio 2008을 깔면서 자동으로 같이 깔리면서 설정이 마음대로 바뀌어서 설치된듯하다..

4. SQL Server Management Studio Express
만약 visual studio 2008 설치하면서 sqlserver2005가 깔렸다면 따로 db관리 프로그램이 설치되지 않았을것이다..
이 프로그램으로 편하게 관리하길 http://go.microsoft.com/fwlink/?LinkId=65110
Posted by orange code
로또~


자바스크립트는 익숙치않아...

<span id="LOTTO"></span>
<script type="text/javascript">
var v = new Array();
while (v.length < 6) {
var n = (Math.floor(Math.random() * 45) + 1);
var b = true;
for (i = 0; i < v.length; i++) if (v[i] == n) b = false;
if (b) v.push(n);
} LOTTO.innerHTML = v.sort(function(a, b) {return eval(a)-eval(b);}).join(", ");
</script>

'컴퓨터 프로그래밍 > 자바스크립트 장난' 카테고리의 다른 글

jQuery 연습2 - 계산기  (0) 2011.08.03
jQuery 연습1  (0) 2011.08.01
자바스크립트! 2  (1) 2009.04.20
자바스크립트!  (0) 2009.04.03
Posted by orange code

티스토리 툴바