[MFC] LRESULT CALLBACK 전역변수 사용법좀 알려주세요.

익명 사용자의 이미지

안녕하세요.
MFC로 캠 영상을 띄어주고 그 영상위에 선을 그려주었습니다.
그런데 선을 실시간으로 계속 좌표값을 받아서 이동해주고싶은데,
좌표값을 전역변수로 선언을 해주었는데
LRESULT CALLBACK 함수에서 받아들이지를 못하네요.

소스 설명입니다.

LRESULT CALLBACK VideoCallbackProc(HWND, LPVIDEOHDR);

영상위에 선을 그린소스는 요함수 안에 들어있어요.


저함수는
class CNumber_DecodeDlg : public CDialog
{
public:
static LRESULT CALLBACK VideoCallbackProc(HWND, LPVIDEOHDR);
}

요렇게 static으로 정의를 해주었습니다.

BOOL CNumber_DecodeDlg::OnInitDialog()
{
capSetCallbackOnVideoStream(m_hCamWnd, VideoCallbackProc);
capSetCallbackOnFrame(m_hCamWnd, VideoCallbackProc);
}

여기서 콜백함수로 호출을 합니다.

LRESULT CALLBACK CNumber_DecodeDlg::VideoCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)
{
내용
}

이안에 함수에서 전역변수의 값을 받아오고싶은데,
error C2597: illegal reference to data member 'CNumber_DecodeDlg::Point_x' in a static member function

이러한 에러가 발생합니다.

static을지우면 에러가나고, 다른걸로 바꿔도 에러가 납니다.
this-> 포인터를 사용해서 받아오려고 시도했으나,, 지식부족으로 못하였습니다.

자세한 설명방법부탁드립니다.

shint의 이미지

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

익명 사용자의 이미지

밑에 익명글 영상위에 선그리는게 제가 올린질문인데,
찾아보니 VFW방식으로 영상을 띄어서 하는 방법이더라구요.
그렇게 해서 위와같은결과가 나왔는데, 좌표값의 위치를 변수로 받아서
실시간으로 선을 그려주려고 합니다..
자세한 설명방법 부탁드립니다.

익명 사용자의 이미지

그냥 전역변수로 해주면되긴 할거에요..
그냥 소스코드 위에 C언어에서 하듯이 전역변수 사용하시면되요..
MFC 가 OOP 이긴하지만 C의 문법을 사용해도 됩니다.

익명 사용자의 이미지

LRESULT CALLBACK CNumber_DecodeDlg::VideoCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr, int value)

이런식으로 말인가요?
마지막에 int형으로 넘겨주는것도 해보았는데, 에러는 없지만
보내주는건 int형으로 50이라든지 정수를 보내주게 되면
받아들이는 값이 0을 받습니다.
대체 왜이럴까요...
고수님들제발 도와주세요~

익명 사용자의 이미지

콜백함수 내의 변경된 값을 다른 함수내에서 받아올 때 초기선언한 값이 불러들여지지는 않을까요(변경된 값을 불러와야 하는데 말이죠 흑..)

익명 사용자의 이미지

콜백함수 안에 코딩 작성할때 BMINFO를 꼭 이용해서 코딩을 해야 하나요?
저 같은 경우는 다른 책에 있는 다른 DIB란 클래스를 이용해서 영상을 받아오고 있어서요

shint의 이미지

설명할게 너무 많네요. ㅡ_ㅡ;;
가장 중요한건. 비트맵과 RGB를 이해하는거예요. 책 보시면 잘 나옵니다.

그 밖에 다른 방법이 있다면... 아래와 같습니다.
- 첨부된 파일 소스를 보시면서 구현 방식을 참고해 보세요.
- WinAPI 관련 도서나 영상처리 관련 도서를 보시면. BITMAP 관련 내용이 있습니다.
- 네이버에 HBITMAP. CBitmap. BITMAPINFO 로 검색해보시면 좀 더 전문적인 다양한 내용이 나옵니다.
- MSDN을 참고해보세요.
http://msdn.microsoft.com/ko-kr/library/z5731wbz(v=VS.80).aspx

비트맵 이미지에 대한 강좌가 데브피아에 있을겁니다.
비트맵. bitmap 찾아보세요.
http://www.devpia.com/Maeul/Contents/List.aspx?BoardID=51&MAEULNo=20

http://www.winapi.co.kr/
제21장 비트맵
가.비트맵의 종류
DIB. DDB 구조보세요.

댓글 첨부 파일: 

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

mirheekl의 이미지

일단 비디오 처리와 직접적 관계는 없는 상황인듯 하고요

error C2597: illegal reference to data member 'CNumber_DecodeDlg::Point_x' in a static member function

요거는 결국

LRESULT CALLBACK CNumber_DecodeDlg::VideoCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr)

이 스태틱 콜백함수 안에서 스태틱이 아닌 멤버(Point_x)를 참조한다는 뜻이거든요. 말씀 그대로 스태틱 함수에서는 스태틱이 아닌 멤버를 참조해선 안됩니다. 굳이 필요하면 포인터를 어딘가 저장했다가 사용하는 수밖에 없습니다.

그리고 맨 끝에 int를 붙였을때 0(또는 기타 쓰레깃값)이 넘어오는건 당연합니다. 콜백함수의 프로토타입과 일치하지 않기 때문에 해당 값이 잘리는 거죠. 콜백 함수 호출은 아마도 비디오 라이브러리가 할테고 그부분 소스는 변경할 수 없을테니..

자세한 구현상황은 알 수가 없지만, 일단 혹시 저 hWnd값이 CNumber_DecodeDlg객체에 1:1대응하고 유니크하다면 HWND와 CNumber_DecodeDlg 포인터간의 맵을 만들어서 사용하는 방법을 생각해볼 수 있겠습니다. HWND가 아니고 LPVIDEOHDR가 유니크하다면 그걸 가지고 맵을 만들수도 있겠죠. 아니면 두 값의 컴비네이션으로..

콜백함수의 본체를 같이 올려주시면 좀더 자세한 답변이 가능할듯 합니다.

--

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.