2009-08-06 4 views
5

Visual Basic 6 프로젝트에 약간의 문제가 있습니다. 모든 IDE에서 잘 작동 하지만 때마다 실행, 응용 프로그램을 실행할 때 충돌이 발생합니다. 응용 프로그램은 콜백을 사용하여 C++ dll과 통신합니다. 콜백이 시작될 때 메시지 상자를 표시하는 것처럼 간단한 코드도 실패합니다.Vb6 응용 프로그램이 IDE에서 작동하지만 실행 파일이 충돌 함

컴파일 모드를 P-Code로 변경했지만 여전히 문제가 지속됩니다.

도움을 주시면 감사하겠습니다.

모든

+0

가 충돌 할 때 오류 메시지가 표시됩니다 : 여기가 CCRP 타이머 라이브러리이 사용되는 형식 라이브러리이다? – MarkJ

+0

아니요, 그냥 닫습니다 –

답변

3

응용 프로그램과 다른 스레드에서 콜백이 발생하는 것 같습니다. [편집 : 짐이 이미 제안한 것을 알 수 있습니다.] 그럴 경우 OLE 관련 내용을 만지거나 런타임을 호출하자마자 바로 kaboom이 표시됩니다. 멀티미디어 타이머 콜백, fwiw와 같은 이야기입니다. 그렇다면이 경우와 동일한 예방 조치를 취해야 할 것으로 생각됩니다.

다른 스레드 콜백을 사용하는 단편 소설은 typelib에 선언 된 PostMessage를 사용하여 사용자가 메시지를 게시해야 VB에서 Err 개체가 설정되지 않고 콜백이 반환되도록해야한다는 것입니다. 게시 된 메시지를 받으면 자신의 처리를 수행합니다. 도움이

http://vb.mvps.org/tools/files/postmessage.zip

희망 ...

+0

Karl 대단히 감사합니다. 내 무지를 유감스럽게 생각합니다. 그러나 이것은 내 첫번째 시각적 인 기본 6 프로젝트입니다. tlb 파일을 어떻게 사용합니까? VB IDE에서 참조 추가를 시도했지만 작동하지 않습니다. 콜백이 나에게 4 값을 반환하기 때문에 postMethod에 구조체 또는 클래스 형식을 전달할 수 있습니까? –

0

코드는 IDE와 같은 위치에서 실행중인 감사합니다? 아마 그것은 참조 문제이며 DLL을 다시 등록해야합니다.

배포 패키지는 모든 것을 설치했는지 확인해야합니다.

+0

참으로 똑같은 위치입니다 사실 동일한 DLL에 대한 다른 호출은 괜찮습니다. –

+0

당신은 늦었거나 초기 바인딩입니까? 또한 아래의 주석은 맞습니다 ... 충돌을 유발하는 코드 세그먼트를 게시하거나 개체를 호출하는 것이 좋을 것입니다. – RiddlerDev

1

누구에게 전화가 왔습니까? 우리에게 약간의 코드를 보여주십시오.

IDE는 실제 문제를 숨길 수 있기 때문에 실제로 실행할 수 있다는 것만으로는 지원되지 않습니다.

콜백의 한 가지 일반적인 문제는 VB6의 런타임이 스레드로부터 안전하지 않기 때문에 다른 스레드가 VB 코드를 다시 호출하면 런타임 문자열이나 개체와 같은 런타임을 호출 할 수 없습니다.

이러한 문제를 해결할 수있는 방법이 있지만 더 많이 알아야 할 것 같습니다.

0

몇 가지 질문 :

  1. 가 개발되었을 때 같은 PC에서 실행하거나 다른 하나인가?
  2. 파일에 매니페스트 파일이 사용됩니까? 그렇다면 mainfest는 XP 테마를 호출합니까?
  3. 또한 매니페스트를 사용하는 경우 OCX 파일 용으로 SXS를 사용합니까?