[질문] VC DLL에서 VB6의 함수를 호출(?) 하는 방법

munamuna의 이미지

안녕하세요.

우선 질문을 올리게 된 배경부터 설명 드리자면..

지금 조금 고약한 프로젝트를 하나 맡아서 수정중에 있습니다.

시험 장치인데 이유없이 한 20분을 돌리면 죽어버리는데, 도저히 해결이 안되니 수정해달라는 요청이었습니다.

보니까 비쥬얼 베이직으로 작성을 해 놨고, 공용 라이브러리는 PMXX라는 녀석을 사용하더군요.

죽는 원인을 살펴보니 결국 VB로는 무겁다 + 뮤텍스 설정이 일절 안되있다 등의 문제입니다.

PMXX에서 엄청난 양의 데이터를 주고 받으며 세션이 끊기면 자동 복구를 해주고 난리를 치는데..

VB에서는 타이머 돌려가며 100미리섹당 한번씩 송신 4세션 수신 4세션을 for문을 돌려주며 순차 처리를 해주더군요..

이걸 전부 수정하자니.. 이건 정말 말도 안되는 규모가 될 듯 싶어서 결국..

VB -> 수신 이후의 화면 처리, 송신 화면 입력 로직 등은 그대로 사용.

PMXX 매니져 DLL -> PMXX에 관련된 모든 처리를 담당.

PMXX 매니져에서 PMXX DLL의 함수를 불러들여 세션관리, 각 세션별 송수신 쓰레드를 별도로 생성, 뮤텍스 관리 등을 해주도록 만들었습니다.

이게 제일 수정도 적고, 효율성도 높아진다고 판단했기 때문입니다.

>>> 그런데 문제는!!! (여기서부터가 질문의 요점입니다)

가급적 화면 처리를 하는 VB는 가볍게 하고 싶습니다.

그래서 매니져에서 각 데이터 종류별로 데이터를 취득하고, "새로운" 데이터가 수신됬을때만 VB에 넘겨 주려고 하는데요.

이 방법을 도저히 모르겠습니다.
(지금은 VB에서 타이머 돌려가며 데이터를 계속 읽어들이고 있습니다)

새로운 데이터가 수신됬을때 VB의 특정 함수를 호출하여 데이터를 넘겨주는 방법이 있는지요?
(콜백이나 함수 포인터 같은 기능을 하는 방법)

가급적 안정적이고 빠른 방법이 있다면 조언 부탁드립니다.. __);

참고로 Visual Basic 6.0 입니다.. ^^;;

그럼.. 즐프되세요.. __);

drinkme의 이미지

제가 제대로 이해했는지 모르겠지만,

초반에 말씀하신 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에서 구현한 함수의 주소를 알 수 있죠.

여기에 온갖 방법을 죄다 설명드리기는
내용이 너무 방대하군요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.