개발 중 GetLastError()의 결과값으로 나오는 정수를 쉽게 해석하는 법
(별도의 툴 필요 없음)

명령 프롬프트에서 net helpmsg <ErrorCode> 를 입력하면 됨.

C:\>net helpmsg 123
The filename, directory name, or volume label syntax is incorrect.

 

해석된 설명이 영어로 나오는 것은 컴퓨터의 언어 설정에 따라서 그런 것임. 
언어 설정이 한글이면 아래처럼 한글로 나옴.

Posted by 세모아
,

hexa 입력후에, ‘비트전환 키패드에서 원하는 bit 클릭하면 0/1 변경됨.

Posted by 세모아
,

자세한 내용은, 첨부한 문서 참고

keyboard scancode.doc
2.04MB

Posted by 세모아
,

//18.12.9  변경사항

chrome 버전 70.0.3538.110(공식 빌드) (64비트) 에서는, 아래처럼 하면

chrome 은 열리지만 IE의 url 이 열리지는 않음.


이유 : 최신 chrome에서는, ChromeHTML URL Protocol Handler 가 더 이상 지원되지 않아서.

 (출처 : https://bugs.chromium.org/p/chromium/issues/detail?id=413236 )


---------------------

//18.10.15


IE에서 open된 url을 쉽게 chrome에서 여는 방법

즉,  IE의 즐겨찾기를 클릭하면, 자동으로 IE에서 보고 있던 URL이 chrome에서 열린다.

(작은 팝업창이 잠깐 생겼다가 사라지는데 이건 정상동작임)


* 설치방법:

1. 첨부파일 설치

chrome.zip


2. IE에서 다음 URL을 열어서 즐겨찾기에 추가

 (-> 그래야 즐겨찾기 아이콘이 chrome꺼로 보여서 보기좋음)

https://www.google.com/intl/ko_ALL/chrome/


3. 위 즐겨찾기의 URL을 아래로 변경

javascript:q=location.href;void(myWindow=open('ChromeHTML:// '+encodeURI(q),'_blank','width=200,height=200'));void(myWindow.close());


추가옵션------

현재 IE창을 닫고 chrome을 열 수 있는 javascript

(IE창을 닫을지 묻는 팝업창에서 Yes를 선택하면 IE창을 닫고 chrome을 열고, No를 선택하면 IE창은 그냥 두고 chrome을 연다)

javascript:q=location.href;void(close());void(myWindow=open('ChromeHTML:// '+encodeURI(q),'_blank','width=200,height=200'));void(myWindow.close());



4. 즐겨찾기의 이름을 Open in URL 로 변경





* 사용 환경 :

- IE version : 11.0.9600.19129CO    Update versions: 11.0.85(KB4457426)

- chrome version : 버전 69.0.3497.100(공식 빌드) (64비트)

- OS : Win 7 64bit




참고 URL: 

How To Launch A URL In Google Chrome

https://www.adamfowlerit.com/2015/05/how-to-launch-a-url-in-google-chrome/


Posted by 세모아
,

- 환경 
 1. A.exe를 VC++에서 디버그 모드로 실행
 2. B.dll의 특정함수를 디버깅 하고 싶음. 그런데, A.exe와 B.dll은 하나의 solution에 들어있는 project가 아님.

- 준비물
 1. A.exe의 소스코드
 2. B.dll의 소스코드
 3. B.pdb 파일 <- 디버그 모드로 빌드했음을 의미.

- 방법
 1. 위 1번 실시
 2. A.exe 실행중 사용되는 B.dll이 있는 폴더에. B.pdb(디버그 정보파일)을 넣음
 3. A.exe code에서 B.dll의 함수를 call하는 곳에 breakpoint BP#1를 걸면
 4. 그 breakpoint BP#1에서 B.dll의 소스코드를 묻는 팝업창이 뜸
    소스코드를 찾아서 선택.
   (이 팝업창의 맨 위쪽에 Original location이 있어서, 소스코드 있는 폴더를 찾기 쉬움)
 5. B.dll의 소스코드가 VC++에 보이면서 디버깅이 가능해짐.
 6. B.dll의 소스코드의 필요한 위치에 breakpoint BP#2를 설정하면, 향후 편리.


* VC+2013에서 실테스트 함.

Posted by 세모아
,

Right-click on the Project on the Solution Explorer, goto Properties. Under Configuration Properties->C/C++->Preprocessor, "Generate Preprocessed File" is what you are looking for.


Then right-click on the file in the Solution Explorer and select "Compile". 

The preprocessed file is created in the output directory (e.g. Release, Debug) with an extension *.i





사용예

-->  Macro가 들어가서 온전한 C++ code로 보여서 분석하기 좋음

--> 파일 1개씩도 compile 할 수 있음.


Posted by 세모아
,

C#을 예를 들면, 다음과 같음.



Before you can do syntax highlighting with C# files, you will need to obtain its syntax definition file, CSHARP.SYN. This is included with TextPad and can be downloaded from http://www.textpad.com/add-ons/syna2g.html. Follow the installation instructions at the bottom of that page, then:

  1. From the Configure menu, choose New Document Class. The Document Class Wizard is displayed.
  2. In the Document Class Name box, type C# and click Next.
  3. In the Class Members box, type *.cs and click Next.
  4. Tick the box to enable syntax highlighting.
  5. From the drop-down list, choose "csharp5.syn" and click Next.
  6. Click Finish.


- 참고 : 왠만한 syntax 파일은 C:\Program Files\TextPad 8\Samples 에 이미 있음.


- 준비사항 : csharp5.syn 파일은 여기( http://semoa.tistory.com/1092 ) 에서 다운로드 하여

              아래폴더에 넣으면 됨 
                      C:\Program Files\TextPad 8\Samples



Posted by 세모아
,

.

csharp5.zip



add 하는 방법은   http://semoa.tistory.com/1093

'Programming' 카테고리의 다른 글

Textpad - How to add syntax  (0) 2017.09.21
Decision Table & 시스템개발의 각 공정과 UML  (0) 2017.05.06
알고리즘- 순열, 판매원  (0) 2016.07.15
Posted by 세모아
,

출처 : 책 : "소프트웨어 설계 테크닉 : 아무도 가르쳐 주지 않았던"

http://www.cyber.co.kr/shop/goods/goods_view.php?goodsno=1724&category=020070


Decision Table



시스템개발의 각 공정과 UML


'Programming' 카테고리의 다른 글

TextPad - syntax file : C# 5.0 (Visual Studio 2012)  (0) 2017.09.21
알고리즘- 순열, 판매원  (0) 2016.07.15
[펌] API 설계 Tip  (0) 2016.06.29
Posted by 세모아
,


Question -------------------------------------------:

How to make solution as clean copy without mapping to TFS ? The problem is that this message shows when I am trying to open it. I want to open it as normal without TFS connection.

enter image description here


Answer -------------------------------------------:

방법 A:

If you want to permanently and completely detach the solution from source control, then try the following:

  1. Click the 'No' button to avoid connecting to TFS.
  2. In the file menu, go to the source control options and clear the bindings. You'll specifically want File - Source Control - Advanced - Change Source Control...
  3. Save the solution.

Next time you open the solution you won't be prompted to connect to TFS.


방법 B:

To Completely remove TFS source control binding follow the two steps:

1)Go to your solution's folder,find and delete all files with *.vssscc and *.vspscc extensions.

2)open your solution's .sln file in notepad find and remove this "GlobalSection(TeamFoundationVersionControl)" section.

Reference Link




Posted by 세모아
,

출처: http://stackoverflow.com/questions/7503678/how-do-i-add-a-new-solution-to-my-team-project

To add a new solution from you local files to TFS you could:

In the solution explorer right click on the solution and select 'Add Solution to Source Control'

Then you can right click and select check in. -> My: Team explorer 상단의 Check In 버튼을 클릭(그전에 comment 기록은 기본)

Then the entire solution will be added to your team project in TFS.

enter image description here

Posted by 세모아
,


출처: http://jacking.tistory.com/792


세미나에서 제가 살짝 정신줄을 놓아서(? -_-;;) 이 부분 설명이 미흡했는데

int* p = nullptr;
p = new int[200];

에서 p의 첫번째 위치에서 11번째만 보고 싶은 경우는
(p+10)



11번째에서 5개만 보고 싶은 경우는
(p+10), 5




Posted by 세모아
,

[VC++] error LNK2019: unresolved external symbol  발생시의 해결책 :

 


해결책 :

  • Linker - Input - Additional Library Directories에 lib 폴더를 지정하고,
    Linker - Input - Additional Dependencies에  abc.lib 을 추가
    또는
    Linker - Input - Additional Library Directories에 lib 폴더를 지정하고,
    cpp 코드 상단에 #pragma comment(lib, "Ws2_32.lib"를 추가
  • 32 and 64 bit versions of the libraries을 맞춤 
    ( 32bit 프로젝트에 64bit lib을 넣어서 발생하는 경우도 있음) //16.8.11

  

cf.

Possible reasons:

  • the sdl.lib and sdlmain.lib settings are not added to dependency list
  • their location was not added to the list of directories where the linker looks
  • you have mismatched 32 and 64 bit versions of the libraries.


Posted by 세모아
,

순열 알고리즘

http://dearfriend.tistory.com/146

http://gorakgarak.tistory.com/522  출력순서가 맞음

http://programbasic.tistory.com/306

http://algorian.tistory.com/9



판매원 알고리즘

http://gorakgarak.tistory.com/710

Posted by 세모아
,

[펌] API 설계 Tip

Programming 2016. 6. 29. 11:19

좋은 코드일수록 재사용이 용이한 코드일 확률이 높습니다. 그런 의미에서 API 설계에 대한 내용을 공유할까 합니다.

Google How to Design A Good API and Why it Matters 부분을 정리해 봤습니다

참조 동영상 : https://www.youtube.com/watch?v=aAb7hSCtvGw&feature=youtu.be

 

  1. 한 개의 API는 하나의 일만해야 하고, 그것을 잘 해야 합니다.

     이름을 짓기 어려울 정도로 여러 가지 일들을 하는 단위 API는 통상적으로 잘못 만들어져 있습니다.

  2. API는 가능한 한 작은 단위로( Atomic) 만들지만, 요구 Spec을 만족시켜야 합니다.

     API는 특성상 한번 배포되면 더할 수는 있지만, 제거할 수는 없기 때문이기도 합니다.

  3. Implementation API에 영향을 줘서는 안 됩니다.

     구현부분을 너무 세세하게 정의하면 사용자가 혼란스러워집니다. 스펙을 너무 과하게 잡지 않는 게 중요하겠죠?

  4. 접근 가능한 메쏘드는 최소화 해야 합니다.

     정보은폐를 최대한 해서 다른 메쏘드에는 접근하지 않도록 설계해야 합니다.

  5. 이름을 잘 짓는 게 아주 중요합니다. 설명 없이 이해가 되면 금상첨화.

     기호나 축약은 사용하지 않는 것이 좋습니다. 저희 회사의 경우는 약어를 많이 쓰는 편이긴 한데, 구글은 그것보다는

     바로 이해가 되는 단어로 네이밍을 하는 것이 중요하다고 하는군요

  6. 문서화가 무엇보다 중요합니다.

  7. API 디자인의 성능 결과에 대해 고려하라. 좋은 디자인은 일반적으로 좋은 성능과 일치합니다.

  8. 플랫폼상의 관습적인 표준을 따르라.

 

"비록 아주 가끔 우리가 좋은 디자인(설계, 아키텍쳐)을 보게 되었다고 하더라도, 우리가 문서 없이 재사용되어질 정도로

좋은 컴포넌트를 볼 수는 없다."

  – D.L.Parnas, Software Aging, 1994

 

위 내용 보다 더 잘 정리된 페이지가 존재하는 군요. 동영상과 함께 보기를 추천 드립니다.

https://subokim.wordpress.com/2011/12/23/how-to-design-a-good-api/

'Programming' 카테고리의 다른 글

알고리즘- 순열, 판매원  (0) 2016.07.15
VLC Player로 RTSP 영상 보는 방법 (TCP or UDP)  (0) 2016.04.04
rtsp url  (0) 2016.03.27
Posted by 세모아
,

#include <cmath>

<math.h>도 같이 include되며 이 안에 'M_PI' 라는 pi 값이 저장되어 있다. (3.14159265358979323846)






from: http://genepart2.tistory.com/6


※레퍼런스를 참조하는 수고를 덜기 위해서 자주 쓰이는 함수들을 간단하게 정리해놓은 것이다.

(따라서 없는 것도 많다.)

설명된 함수들은 함수의 원형이며 사용시에는 함수명(변수)로 사용하면 된다. ex) abs(x);

헤더파일은 "math.h" 이다


1. 절대 값 함수

  int abs(int x) - int x의 절대값을 반환

  long labs(long x) - long x의 절대값을 반환

  double fabs(double x) - double x의 절대값을 반환


2. 삼각함수

  ※삼각함수들은 인수는 각도가 아닌 라디안 값이며 각도를 라디안 값으로 바꾸는 공식은 "각도*π/180" 이다.

     역함수들은 인자값으로 -1 ~ 1사이의 값만 가질 수 있다.

  double acos(double x) - cos의 역함수로써 cos(x) = a라면 acos(a) = x가 된다

  double asin(double x) - sin의 역함수

  double atan(double x) - tan의 역함수

  double atan2(double x, double y) - atan(x/y)와 같은 기능의 함수. y가 0에 가까울수록 atan보다 정확하다.

  double cos(double x) - 삼각함수 cos(x)의 값을 구한다.

  double sin(double x) - 삼각함수 sin(x)의 값을 구한다.

  double tan(double x) - 삼각함수 tan(x)의 값을 구한다.

  double cosh(double x) - 쌍곡선 cosh(x)의 값을 구한다.

  double sinh(double x) - 쌍곡선 sinh(x)의 값을 구한다.

  double tanh(double x) - 쌍곡선 tanh(x)의 값을 구한다.


3. 정수화 함수

  double ceil(double x) - double x의 소수 값 이하 올림

  double floor(double x) - double x의 소수 값 이하 버림


4. 지수함수

  double exp(double n) - eⁿ의 값을 구한다. 자연상수 e = 2.71828182845904523536...

  double pow(double x, double y) - x의 y승을 구한다.

  double sqrt(double x) - x의 제곱근을 구한다.

  double log(double x) - 밑이 e값인 logx값을 구한다.

  double log10(double x) - 밑이 10인 logx값을 구한다.


5. 기타함수

  double fmod(double x, double y) - x/y의 나머지 값을 구한다.

  double ldexp(double x, int y) - x*(2의 y승) 값을 구한다.

  double modf(double x, double *y) - x를 정수부와 소수부로 분리해서 소수부는 반환, 정수부는 y에 저장한다.


Posted by 세모아
,

출처: http://blog.bsk.im/2013/10/24/visual-studio-console-remained/



다양한 언어를 지원하면서 강력한 디버깅 기능을 가지고 있는 비주얼 스튜디오는 이클립스와 더불어 가장 많이 사용되는 IDE(통합 개발환경, Integrated Developing Environment)입니다. 아직도 대다수의 사람들이 프로그래밍을 배울 때 C나 C++로 시작합니다. 가장 기본이 되면서 중요하기 때문이죠. 많은 대학교에서 C를 기초과목으로 가르치고 있는 것도 비슷한 이유일 것입니다. Visual Studio는 C와 C++, C#과 닷넷 등에 대한 강력한 개발환경을 지원하는데다, DreamSpark 프로그램을 통해 교육기관이나 학생들에게 무료로 배포되기 때문에 많은 사랑을 받고 있죠.

프로그래밍을 처음 배우시는 분들이나 간단한 프로그램을 만드는 경우 보통 과거 도스 환경을 연상케 하는, “까만 바탕에 하얀 글씨” 인터페이스인 콘솔 응용 프로그램을 만들게 됩니다.

일반적으로 코딩을 하는 경우 먼저 코드를 작성 한 뒤, 프로그램을 실행 해 자신의 코드가 잘 동작하는 지 확인하고 오류를 잡기 위한 ‘디버깅’과정을 반복하게 됩니다.

Visual Studio에서는 Ctrl + F5키를 이용해 프로그램을 실행, 즉 “디버깅 하지 않고 시작(Start without debugging)”할 수 있습니다. 그러면 명령 프롬프트가 실행되면서 창에서 결과값을 확인할 수 있죠. 그런데 프로그램이 종료되면서 이 콘솔 창이 사라지게 되면 프로그램이 종료되기 전까지의 결과를 확인할 수 없게 됩니다. 그래서 아래 그림처럼 Visual Studio는 자동으로 프로그램이 종료되기 직전에프로그램을 멈추어 줍니다.

비주얼 스튜디오에서 종료 직전에 프로그램을 자동으로 멈춘 모습

즉, 비주얼 스튜디오가 소스코드에 다음과 같이 system(“pause”)를 자동으로 추가해 주는 것입니다.

#include <stdio.h>
int main(...) {  
    //작성한 코드
    system("pause");
    return 0;
}

하지만, 프로젝트 생성 시 콘솔 응용 프로그램으로 생성하지 않는 경우 Build 할 때의 flag가 달라져 Ctrl + F5를 이용해 실행하는 경우에도 프로그램이 종료되면 자동으로 콘솔 창이 꺼지는 경우가 있습니다.

이런 경우 위 코드처럼 소스코드 마지막에 system(“pause”)를 추가하거나 다음과 같이 프로젝트 속성을 바꿔 주면 됩니다.

  1. 메뉴의 [프로젝트(Project)] – ['프로젝트 이름' 속성(Properties)]으로 들어갑니다.

  2. 왼쪽의 [구성 속성(Configuration Properties)] – [링커(Linker)]에서 [시스템(System)]을 선택하고, 오른쪽의 [하위 시스템(Subsystem)]에서 콘솔 Console (/SUBSYSTEM:CONSOLE)을 선택합니다.

  3. 이제 Ctrl + F5를 눌러 프로그램을 실행하면 종료 후 창이 사라지지 않는 것을 확인할 수 있습니다.

    비주얼 스튜디오에서 종료 직전에 프로그램을 자동으로 멈춘 모습


'Programming > C++' 카테고리의 다른 글

C 표준 수학함수  (0) 2016.06.18
[펌] FFMPEG: Can not free AVPacket when decode H264 stream?  (0) 2016.03.27
av_free_packet 예제들  (0) 2016.03.27
Posted by 세모아
,

출처: 

http://www.idis.co.kr/resources/upload/cs_etc/201307231010_68691.pdf

  ( 출처 다운로드 안됨 //16.7.19 )



아래 그림에서 노란색 마킹 영역 참고.


VLC Player의 도구 - 환경 설정 에서






cf.


rtsp로 보면 캐쉬 시간이 크면 느려지므로, 아래처럼 100ms 정도면 반응이 빠름.






'Programming' 카테고리의 다른 글

[펌] API 설계 Tip  (0) 2016.06.29
rtsp url  (0) 2016.03.27
[펌] 풀 덤프 파일을 남기는 방법  (0) 2016.02.25
Posted by 세모아
,

rtsp url

Programming 2016. 3. 27. 07:34

//16.3.27

Not working --------------------

rtsp://video2.earthcam.com/fecnetwork/4017timessquare.flv


Working ------------------

rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov  H.264  240*160

rtsp://85.255.175.244:554/h264     H.264 1920*1080

rtsp://q1604.dnsdojo.com:1935/live/sys2.stream    H.264  800*500

Posted by 세모아
,

AVPacket 해제에 대한 글


출처 :  http://stackoverflow.com/questions/26090992/ffmpeg-can-not-free-avpacket-when-decode-h264-stream





av_free_packet will clear your packet data, the same pointer that was allocated inside av_read_frame. But you changed it in packet.data += bytesDecoded; => crash.

Several advices:

  • No need to call av_init_packet if the first use of your packet is av_read_frame (it is done inside this function). But if you keep your code, you need it in order to initialize packet.size to 0 (tested, but not initialized the first time)

  • Call av_free_packet each time you are done with the packet data, only when the decode is successful. In your code, it means you must call it after avcodec_decode_video2, even if the frame is not finished.

  • Once your packed is decoded (i.e. avcodec_decode_video2 is ok, no matter if frameFinished is true or false), you can free it. No need to keep it and change data pointer. The process is "read packet, decode it, free it. read next packet, decode it, free it.". (Note that this does not apply to audio packets).

I suggest simplify your main loop by something like (read first, decode after):

while(true)
{
    // Step 1: Read packet
    while(true)
    {
        av_read_frame(pFormatCtx, &packet);

        // todo: Error handling

        if(packet.stream_index != videoStreamIndex)
        {
            av_free_packet(&packet);
        }
        else
        {
            break;
        }
    } while (packet.stream_index != videoStreamIndex);

    // Step 2/3: Decode and free
    avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
    av_free_packet(&packet);

    // todo: Error handling and checking frameFinished if needed
    // Of course, if you need to use the packet now, move the av_free_packet() after this
}


Posted by 세모아
,