[질문] VC DLL에서 VB6의 함수를 호출(?) 하는 방법
안녕하세요.
우선 질문을 올리게 된 배경부터 설명 드리자면..
지금 조금 고약한 프로젝트를 하나 맡아서 수정중에 있습니다.
시험 장치인데 이유없이 한 20분을 돌리면 죽어버리는데, 도저히 해결이 안되니 수정해달라는 요청이었습니다.
보니까 비쥬얼 베이직으로 작성을 해 놨고, 공용 라이브러리는 PMXX라는 녀석을 사용하더군요.
죽는 원인을 살펴보니 결국 VB로는 무겁다 + 뮤텍스 설정이 일절 안되있다 등의 문제입니다.
PMXX에서 엄청난 양의 데이터를 주고 받으며 세션이 끊기면 자동 복구를 해주고 난리를 치는데..
VB에서는 타이머 돌려가며 100미리섹당 한번씩 송신 4세션 수신 4세션을 for문을 돌려주며 순차 처리를 해주더군요..
이걸 전부 수정하자니.. 이건 정말 말도 안되는 규모가 될 듯 싶어서 결국..
VB -> 수신 이후의 화면 처리, 송신 화면 입력 로직 등은 그대로 사용.
PMXX 매니져 DLL -> PMXX에 관련된 모든 처리를 담당.
PMXX 매니져에서 PMXX DLL의 함수를 불러들여 세션관리, 각 세션별 송수신 쓰레드를 별도로 생성, 뮤텍스 관리 등을 해주도록 만들었습니다.
이게 제일 수정도 적고, 효율성도 높아진다고 판단했기 때문입니다.
>>> 그런데 문제는!!! (여기서부터가 질문의 요점입니다)
가급적 화면 처리를 하는 VB는 가볍게 하고 싶습니다.
그래서 매니져에서 각 데이터 종류별로 데이터를 취득하고, "새로운" 데이터가 수신됬을때만 VB에 넘겨 주려고 하는데요.
이 방법을 도저히 모르겠습니다.
(지금은 VB에서 타이머 돌려가며 데이터를 계속 읽어들이고 있습니다)
새로운 데이터가 수신됬을때 VB의 특정 함수를 호출하여 데이터를 넘겨주는 방법이 있는지요?
(콜백이나 함수 포인터 같은 기능을 하는 방법)
가급적 안정적이고 빠른 방법이 있다면 조언 부탁드립니다.. __);
참고로 Visual Basic 6.0 입니다.. ^^;;
그럼.. 즐프되세요.. __);
방법은 아주 많습니다.
제가 제대로 이해했는지 모르겠지만,
초반에 말씀하신 VB의 제약사항은 대부분 극복이 가능합니다.
가령, Mutex 사용이라던가 하는 것은
VB에서 windows API를 호출하여 사용이 가능합니다.
(어짜피 c를 사용하더라도, windows API를 호출하는 거니까요)
물론, multi-threading도 VB에서 가능합니다.
다음으로,
c module을 VB와 연동시키기 위한
(제가 생각하는) 교과서적인 방법은
c module을 COM object로 만드는 것입니다.
다른 쉬운 방법도 있겠죠.
c module에 VB function의 callback을 넘겨주고 처리하는 방법이죠.
AddressOf 를 사용하면 VB에서 구현한 함수의 주소를 알 수 있죠.
여기에 온갖 방법을 죄다 설명드리기는
내용이 너무 방대하군요.
댓글 달기