태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

비주얼 베이직에서 myVision 라이브러리를 사용하는 법

Image Processing/myVision USB 2009/10/13 14:32

기본적으로 비주얼 베이직에서는 DLL에 있는 함수를 호출할 수 있습니다.

하지만 myVision 라이브러리는 "c" 형태의 함수 호출을 지원하고

비주얼 베이직은 "파스칼" 형태의 함수 호출을 지원하기 때문에

래핑 함수(wrapping function)를 만들어 이부분을 변경할 필요가 있습니다.

사용자 삽입 이미지



즉, 아래와 같이 "파스칼" 형태의 함수 호출을 지원하는 별도의 MVULibVB.dll을 만들어

MVULibVB.dll에서 "c" 형태의 MVULib.dll의 함수를 호출하도록 하면 됩니다.


#include "MyVision.h"

#pragma comment(lib, "MVULib.lib")


extern "C" __declspec(dllexport) HDIG __stdcall DigAlloc(char* DigNum)

{

       return digAlloc(DigNum);

}

...


위의 함수에서 __stdcall이 파스칼 형태의 함수라는 것을 나타냅니다.

digAlloc()은 MVULib.dll에 있는 함수로 "c" 형태의 함수입니다.


따라서 위와 같이 DLL 함수를 만들면, 비주얼 베이직에서 DigAlloc() 함수를 호출할 수 있습니다.

MVULibVB.dll에 있는 DigAlloc() 함수를 비주얼 베이직에서 사용하기 위해서는

비주얼 베이직에서 아래와 같이 선언해야 합니다.


Public Declare Function DigAlloc Lib "MVULibVB.dll" (ByVal Dev As String) As Long


위와 같이 선언하면 최종적으로 비주얼 베이직에서 MVULibVB.dll의 DigAlloc() 함수를 거쳐

myVision 라이브러리의 digAlloc() 함수를 호출할 수 있게 됩니다.

이런 방식으로 myVision 라이브러리에 있는 모든 함수를 비주얼 베이직에서

사용하실 수 있습니다.


하지만 언어적 특징 때문에 사용할 수 없는 부분도 있습니다.

bufGetPtr2D() 함수와 같이 버퍼의 포인터를 리턴하는 함수의 경우 비주얼 베이직에서는

포인터를 사용할 수 없기 때문에 버퍼의 포인터를 얻어오는 것이 무의미합니다.

이를 위하여 MVLibVB.dll에서 BufCopyBuf2Array(), BufCopyArray2Buf() 함수를

별도로 만들었습니다.

BufCopyBuf2Array(), BufCopyArray2Buf() 함수는 비주얼 베이직의 배열과

myVision 라이브러리 버퍼의 데이터를 상호간에 복사하기 위한 함수입니다.


extern "C" __declspec(dllexport) void  __stdcall BufCopyBuf2Array(HBUF hBuf, void *Array, int Length)

{

       void **buf = (void **)bufGetPtr2D(hBuf);

       memcpy(Array, buf[0], Length);

}


extern "C" __declspec(dllexport) void  __stdcall BufCopyArray2Buf(HBUF hBuf, void *Array, int Length)

{

       void **buf = (void **)bufGetPtr2D(hBuf);

       memcpy(buf[0], Array, Length);

}


비주얼 베이직에서 먼저 영상정보를 저장할 배열을 선언한 뒤

BufCopyBuf2Array() 함수를 호출하면 비주얼 베이직 배열에 버퍼의 내용을 얻어 올 수 있습니다.

반대로 BufCopyArray2Buf()를 이용하연 비주얼 베이직 배열의 내용을 버퍼에 복사할 수 있습니다.

(자세한 사용법은 첨부된 예제 코드 중 TestBuffer를 보시면 됩니다.)


Const g_Width As Long = 640

Const g_Height As Long = 480

Dim Buf(g_Width - 1, g_Height - 1) As Long


' 버퍼를 할당한다.

hBuf = BufAlloc(g_Width, g_Height, MV_RGB32)        

' 버퍼의 내용을 배열로 복사한다.

Call BufCopyBuf2Array(hBuf, Buf(0, 0), g_Width * g_Height * 4)


즉, 위와 같은 방법으로 적절히 이용하시면 비주얼 베이직에서 myVision 라이브러리를

사용하시는데 문제가 없을 것입니다.


예제 코드 설명


TestGrab

기장 기본적인 프로그램으로 myVision 라이브러리를 이용하여 카메라로부터 영상을

캡쳐하는 프로그램입니다. Grab 버튼을 누르시면 한장의 영상을 카메라로부터 캡쳐합니다.

GrabConti 버튼을 누르면 연속적으로 영상을 캡쳐하며 Halt 버튼을 누르면 정지합니다.

사용자 삽입 이미지



TestBuffer

TestBuffer는 캡쳐된 영상의 버퍼 사용법을 테스트하기 위한 프로그램입니다.

Grab 버튼을 눌러 영상을 캡쳐한 후 마우스를 영상위에 놓으면 놓여진 위치의 RGB 값이 표시됩니다.

Write 버튼을 누르면 버퍼에 청색박스를 그린 후 출력시킵니다.

사용자 삽입 이미지


 

예제 코드
Trackback 0 : Comment 0
◀ PREV : [1] : ... [30] : [31] : [32] : [33] : [34] : [35] : [36] : [37] : [38] : ... [125] : NEXT ▶