본문 바로가기

About Programing

C#에서 C++의 CString 값 전달해 주기 출처 : http://blog.naver.com/just720?Redirect=Log&logNo=40137298010 C# 에서는 이렇게 쓸꺼야 일단 선언은 이렇게 하고 [DllImport("CV_capture.dll")] public static extern void CV_RegistInit(IntPtr _IntPtr); 넘겨 줄때는 이렇게! IntPtr _IntPtr = Marshal.StringToBSTR("abcd"); CV_RegistInit(_IntPtr); C++에서는 BSTR로 받아서 CString으로 변환해준다. extern "C" __declspec(dllexport) void __stdcall CV_RegistInit(BSTR _RegistName) { CString str; str.. 더보기
dxtrans.h 에러 예전에는 dx 8.0x 버전까지만 나오고 이후 버전에 없었기 때문에 예전 버전을 썻지만 요즘에는 WPF에 함께 설치가 되어 확실히 간편해 졌다. 하지만 #include 와 #include 헤더를 인클루드 시키고, lib 파일을 추가한 다음에 컴파일을 했더니 fatal error C1083: 포함 파일을 열 수 없습니다. 'dxtrans.h': No such file or directory 이런 에러가 떳다..... 응? ... 내부적인 에러였다.. 머 검색을 좀 하다보니 최신 버전으로 바뀌며 먼가 안맞아 져서 수정을 해야한다는데...... 결국 해결책을 찾았다. 해결책은 #include 와 #include 사이에 #pragma include_alias( "dxtrans.h", "qedit.h" ) #de.. 더보기
영상 해상도 변경 필터 (Scale Filter) 기본적으로 Direct show에서는 해상도를 변경할수 있는 Filter를 제공해 주지 않는다. 검색을 해 봐도 웹캠에서 받아온 영상의 해상도를 변경하거나, 랜더링 할때 출력되는 해상도를 변경하는 방법밖에 나오지 않는다. 집요한 구글링 끝에 이미 구현되어 있는 해상도 변경 필터를 찾아냈다. 필터에 대한 자세한 설명은 아래 링크 참조. http://wirelessafrica.meraka.org.za/wiki/index.php/Real-Time_Video_Coding 더보기
가상함수와 테이블 (vtbl) 출처 : http://skmagic.tistory.com/140 / http://zerobell.tistory.com/17 1. 가상함수 동적 결합을 하는 함수. 가상함수로 선언하면 포인터의 타입이 아닌 포인터가 가리키는 객체의 타입에 따라 멤버 함수를 선택한다. virtual 키워드를 선언부에 넣어주면 가상함수가 된다. #include using namespace std; class CCellPhone { public : virtual void CellPhone_1 (); void CellPhone_2 (); }; class CGalaxyS : public CCellPhone { public : virtual void CellPhone_1 (); void CellPhone_2 (); }; void CC.. 더보기
Register variable (레지스터 변수) 출처 : 클릭 레지스터 변수(Register variable)는 프로세서의 레지스터에서 처리되는 변수를 말합니다. 레지스터는 CPU 안에 있는 메모리로써, 기계어 한 두개 수준에서 직접 처리가 되므로 프로그램의 수행 속도를 향상시킬 수 있습니다. 따라서 프로그램의 수행에서 가장 영향을 주는 변수를 레지스터 변수로 선언하여 사용하면 프로그램 속도를 비약적으로 향상시킬 수 있는 경우가 있습니다. 하지만 register를 붙인다고 꼭 레지스터 변수로 선언되는 것은 아닙니다. 경우에 따라서는 남는 레지스터가 없을 수도 있으므로 여기서 말하는 레지스터는 컴파일러에게 반드시 그렇게 선언하라고 요구하는 의미보다는, "가능하면 레지스터로 처리하라" 는 정도의 약한 의미에 불과합니다. 레지스터 변수를 선언하려면 변수를 .. 더보기
[DirectShow 레퍼런스] IMediaFilter 인터페이스 1. 이름 : IMediaFilter 2. 설명 : 시간에 기반한 데이터를 제공하는 모든 멀티미디어 콤포넌트들이 제공해야 하는 인터페이스. 콤포넌트의 실행 상태 제어와 상태를 다른 객체와 동기화 시키는 방법을 제공하기 위해 사용함. 3. 상속 : IPersist 4. 구현 : 모든 filter에서 구현되어야 함. CBaseFilter를 사용해서 구현 가능 5. 사용 : 보통은 IMediaFilter를 상속한 IBaseFilter를 많이 사용하기 때문에, 직접 어플리케이션에서 사용되는 경우는 거의 없음. 필터그래프 매니저가 사용하며, 플러그인 배급자에 의해 필터그래프 매니저가 노출시킨 IMediaFilter의 메소드들이 호출되는 경우가 있음. 6. 메소드 : - IUnknown 메소드들 : COM객체니까 .. 더보기
[DirectShow 레퍼런스] IBaseFilter Interface 1. 이름 : IBaseFilter 2. 설명 : DirectShow의 모든 필터가 필수적으로 노출해야 하는 인터페이스이다. 3. 상속 : IMediaFilter 4. 구현 : 모든 DirectShow필터는 이 인터페이스를 구현해야 함. CBaseFilter클래스를 사용해 구현할 수 있음 5. 사용 : 필터그래프 매니저가 일반적으로 사용. 어플리케이션은 핀이나 벤더관련 정보를 얻는데 사용할 수 있음. 6. 메소드 : - IUnknown 메소드들 : COM객체니까 당연히 지원해야 함 - IMediaFilter 메소드들 : IMediaFilter메소드를 살펴볼 것 - IBaseFilter에서 선언된 메소드들 * EnumPins : 필터가 제공하는 핀들을 나열 * FindPin : 특정 ID에 해당하는 핀을 .. 더보기
[DirectShow기초] 필터와 핀 여러번 반복해서 지겨운 생각도 들겠지만, DirectShow구조는 필터들을 연결해서 데이터가 흘러가게 하고, 필터그래프 매니저가 데이터의 흐름을 제어하는 구조로 되어있다. 그렇다면 필터와 필터는 어떻게 연결할 수 있을까? 이 연결을 위한 객체가 바로 핀(pin)이다. IC에 핀이 있어서 다른 소자와 연결할 수 있는 것 처럼 필터에도 핀이 있어 다른 필터와 연결을 할 수 있는 것이다. IC마다 핀의 종류와 성격이 다르 듯, 필터의 성격에 따라 하나의 핀만을 노출할 수도 있고, 둘 이상의 핀을 노출할 수도 있다. MSDN의 설명에 따르면, 핀은 필터에 의해 생성되는 COM 객체로써, 필터에 대한 단방향 데이터 스트림 (unidirectional data stream)의 연결점 역활을 한다. 입력핀은 데이터를.. 더보기
[DirectShow기초] 필터와 필터 그래프 필터란? MSDN에 따르면 다음과 같다. A key component in the DirectShow architecture, a filter is a COM object that supports DirectShow interfaces or base classes. It might operate on streams of data in a variety of ways, such as reading, copying, modifying, or writing the data to a file. Sources, transform filters, and renderers are all particular types of filters. A filter contains pins that it uses to conne.. 더보기
[DirectShow기초] File Play 이 예는 MSDN에 나온 샘플 DirectShow어플리케이션이다. 앞에서 말했던 DirectShow 어플리케이션 작성의 4가지 스텝을 다시 기억해 보자. 1. 필터그래프 매니저의 인스턴스 생성 2. 매니저를 이용해서 필터 그래프 생성 3. 매니저를 이용해서 필터그래프에서 데이터를 처리하도록 함 4. 사용이 끝나면 리소스 반환 1. 인스턴스 생성 앞에서 이야기했듯이 매니저나 필터 모두 COM객체이기 때문에, 우선 COM라이브러리를 초기화 해야 한다. 이 작업은 CoInitialize를 호출함으로써 이루어진다. HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) { // 에러처리 코드(간단하게 하기 위해 생략) } 에러처리는 생략했으며, 필요한 분은 COM책을 들여다 보시.. 더보기