336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

텍스트 읽어주는 프로그램, 사이트


텍스트로 작성된 것을 읽어주는 프로그램과 사이트 입니다.



프로그램 테스트용으로 음성파일이 필요한데


마땅한 음성파일을 찾지 못해서



신문 기사 긁어 넣고 쓰고 있네요 ㅋ



JetSpech.zip





설치 하지 않아도 되고요 이런식으로 텍스트만 붙여 넣고


스타트 버튼(▷)만 눌러주면 소리가 나옵니다.




혹은 웹 브라우저에서 소리가 발생하는 것이 필요하다면


http://www.oddcast.com


에서 음성을 읽어 줍니다.






MFC 프로젝트에서 ATL 연동하기

Programming/COM,ATL 2016. 3. 29. 11:44 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MFC 프로젝트에서 ATL 연동하기


작업 환경 : VS2013


일반 MFC 프로젝트를 만듭니다.




2. 대화 상자 기반



ActiveX 컨트롤 체크 확인



만들어진 다이얼로그에서 ActiveX 컨트롤 추가



추가하면 하얀 네모가 다이얼로그에 추가된다.



ActiveX 컨트롤을 클릭한다음 우클릭하여 속성이 뜨고 번개모양 아이콘을 누르면 연결된 이벤트들이 확인된다.



ATL 의 Property 와 Method 는 ActiveX 컨트롤 멤버변수 추가하여서 사용이 가능하다.



예제로는 Ctrl 이라는 멤버 변수를 추가하였다.

다음과 같이 h, cpp 파일이 만들어진다.



내부에는 ATL 에서 구현한 Property 와 Method 가 보인다.



ActiveX 컨트롤에서 이벤트 처리 함수를 추가하였다.



이제 Ctrl 의 Property 와 Method 를 불러올 수 있다.



ATL/COM 강좌

Programming/COM,ATL 2016. 3. 25. 16:21 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ATL/COM 강좌


  COM(Component Object Model)은 컴포넌터 기반의 분산 컴퓨팅 기술이고, ATL(Active Template Library)은 그 COM 프로그래밍을 쉽게 하기 위해 Visual C++에서 제공하는 라이브러리이다. 소개에서는 COM의 개념 및 구조를 개괄적으로 설명하고, Client 프로그램 제작 및 Server 프로그램 제작에서 ATL을 사용하지 않고 COM 프로그램을 작성하는 방법을 설명하는데 이 부분은 개념 위주로 보면 되고, 실제 프로그래밍에서는 나머지 부분(쉬운 Server 프로그램 제작, 쉬운 COM Client 프로그램 제작)을 이용하여 프로그램을 작성한다.


좋은 강좌가 있어서 링크를 올립니다.


http://jys92.com.ne.kr/AtlCom.htm


336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ATL 프로젝트에서 hWnd사용하기




문제 상황 : 


ATL 프로젝트에서


소켓 통신을 위한 쓰레드를 만들어 사용하다


소켓 통신 도중 특정 메시지 수신시


ATL 이벤트를 발생 시키고 싶었다.


------요약-----------


Worker Thread 에서 ATL event(Fire_xxxx) 실행



직접 Fire 함수를 실행시 Invoke 부분에서


E_UNEXPECTED Catastrophic failure. 를 리턴한다.



Worker Thread 에서 ATl main Thread 의 함수를 실행하여 그런것 같다.



SendMessage 나 PostMessage 로 Main Thread 가 실행하도록 메시지를 주는 방법을 찾던 도중


SendMessage가 hWnd 를 이용하여 타 쓰레드간 메시지를 주고 받을수 있다는 점을 활용하였다.



하지만 기본 ATL 객체는 hWnd 를 갖고 있지 않다.



생성자 호출 시


상속 받은 m_bWindowOnly 변수를 TRUE 로 초기화하면 


m_bWindowOnly = TRUE;



상속 받은 m_hWndCD 를 사용 할 수 있다.


m_hWndCD를 활용하여 WorkerThread 에서


메인 쓰레드로 메세지를 준다.



::SendMessage(pHelloCtrl->m_hWndCD, WM_xxx, (WPARAM)NULL, (LPARAM)NULL);




추가-------

혹시나 메인 쓰레드에서 메세지를 받는 방법을 모르는 사람이 있을까 싶어서 추가합니다.

일반 MFC 는 이런 메세지 맵을 갖고 있는데

BEGIN_MESSAGE_MAP(CMFCApplication2Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CMFCApplication2Dlg::OnBnClickedButton1)
END_MESSAGE_MAP()


ATL 프로젝트는


BEGIN_MSG_MAP(xxxxxx)
MESSAGE_HANDLER(WM_CODE_START, OnSTART)
MESSAGE_HANDLER(WM_CODE_STOP, OnSTOP)
CHAIN_MSG_MAP(CComControl<xxxxxxxx>)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()

이런 메세지 맵을 갖고 있습니다.



여기에 SendMessage 로 받을 메세지를 선언하고 그 때 실행할 함수를 위치시키면 됩니다.




336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ATL 프로젝트로 만든 DLL 을 MFC 프로젝트에서 사용하기



ATL 프로젝트로 만든 DLL 이름을 ComServer.DLL 이라고 가정하겠습니다.


ComServer 대신에 자신이 만든 DLL 을 쓰면 됩니다.



사용하고자하는 ComServer.dll 파일을 프로젝트 디렉토리에 복사한다.


stdafx.h 파일에 


#import "ComServer.dll" no_namespace named_guids


넣고


빌드를 하게 되면


빌드 폴더에 ComServer.tlh , ComServer.tli 가 생성된것을 확인 할 수 있습니다.



ComServer.tlh 파일을 열어 둡니다.




그다음 Dlg 의 OnInitDialog() 같은 곳에 아래의 코드를 삽입한다.


ComTest 는 객체 이름입니다.


try{


UpdateData();


HRESULT rc;


IComTestPtr pComTest; //IComTest *pComTest 도 가능 !!! (IComTest 의 스마트포인터)


rc = CoCreateInstance(CLSID_ComTest, NULL, CLSCTX_INPROC_SERVER, DIID_IComTest, (void**)&pComTest);


if (FAILED(rc)){


MessageBox("Failure in call to CoCreateInstance");


return;


}


pComTest->(사용하고 싶은 속성이나 메서드);


}


catch (_com_error &e){


CString strBuffer;


strBuffer.Format("Code = %08lXnCode meaning = %snSource = %snDescription = %sn",

e.Error(), e.ErrorMessage(), e.Source(), e.Description());

AfxMessageBox(strBuffer);

}






'Programming > COM,ATL' 카테고리의 다른 글

MFC 프로젝트에서 ATL 연동하기  (2) 2016.03.29
ATL/COM 강좌  (0) 2016.03.25
ATL 프로젝트에서 hWnd사용하기 #2  (0) 2016.03.25
ATL 프로젝트에서 hWnd사용하기  (0) 2016.03.25
ocx, dll 라이브러리 등록  (0) 2016.03.15

ATL 프로젝트에서 hWnd사용하기

Programming/COM,ATL 2016. 3. 25. 11:19 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ATL 프로젝트에서 hWnd사용하기




문제 상황 : 


ATL 프로젝트에서


소켓 통신을 위한 쓰레드를 만들어 사용하다


소켓 통신 도중 특정 메시지 수신시


ATL 이벤트를 발생 시키고 싶었다.


------요약-----------


Worker Thread 에서 ATL event(Fire_xxxx) 실행



직접 Fire 함수를 실행시 Invoke 부분에서


E_UNEXPECTED Catastrophic failure. 를 리턴한다.



Worker Thread 에서 ATl main Thread 의 함수를 실행하여 그런것 같다.



SendMessage 나 PostMessage 로 Main Thread 가 실행하도록 메시지를 주는 방법을 찾던 도중


SendMessage가 hWnd 를 이용하여 타 쓰레드간 메시지를 주고 받을수 있다는 점을 활용하였다.



하지만 기본 ATL 객체는 hWnd 를 갖고 있지 않다.



생성자 호출 시


상속 받은 m_bWindowOnly 변수를 TRUE 로 초기화하면 


m_bWindowOnly = TRUE;



상속 받은 m_hWndCD 를 사용 할 수 있다.


m_hWndCD를 활용하여 WorkerThread 에서


메인 쓰레드로 메세지를 준다.



::SendMessage(pHelloCtrl->m_hWndCD, WM_xxx, (WPARAM)NULL, (LPARAM)NULL);






ocx, dll 라이브러리 등록

Programming/COM,ATL 2016. 3. 15. 15:10 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ocx, dll 라이브러리 등록


등록할 라이브러리를 32비트 운영체제의 경우 system32,


64비트 운영체제의 경우 syswow64에 넣어준다음


관리자권한 cmd.exe 에서


regsvr32 등록할라이브러리