하나의 ActiveX DLL로 인해 다른 인스턴스를 만들려고 혼란스럽고 일관성없는 결과가 나타납니다.오류 48 코드를 다시 작성한 후 dll을로드하는 중 MSADO 관련
우리는 전체 코드베이스를 재구성 할 때까지 모든 것이 작동했습니다. 몇 년 전부터 사용하지 않았던 모든 것이 작동했습니다. 우리는 이전에 우리가 필요로하는 조각을 만들었습니다.
문제는 여기에 여러 장소에서 발생되지만 것이 대표적인 예입니다
Dim objMid As MiddlePiece.clsMyClass
Set objMid = CreateObject("MiddlePiece.clsMyClass")
이 오류 타격 경우 : CreateObject
라인 (48 DLL을로드하는 오류). 나는 코드를 바꾸려고 시도하고 다음과 같은 결과를 얻었다.
Dim objMid As MiddlePiece.clsMyClass
Set objMid = New MiddlePiece.clsMyClass
그러면 오류 48이 다시 나타납니다. 또한 오류 하나가 실제로 작동하는지 (48)
Dim objMid As Object
Set objMid = CreateObject("MiddlePiece.clsMyClass")
을 제공
Dim objMid As Object
Set objMid = New MiddlePiece.clsMyClass
.
누구나 실제 차이점이 무엇인지 설명 할 수 있으며, 왜 처음에는 적어도 하나가 작동 했는가?
나는 초기 바인딩과 후기 바인딩의 차이점을 이해하고 마지막 예제 만 후기 바인딩의 인스턴스라고 생각하지만 필자는 PC와 테스트 시스템을 빌드 할 때 레지스트리에 같은 버전의 MiddlePiece.dll, 그래서 이것이 왜 실패할지에 대해서는 명확하지 않다.
이 문제는 MiddlePiece.dll이 Microsoft ActiveX Data Objects로 작성되었다는 사실에서 비롯된 것으로 보입니다. 우리가 Windows XP에서 Windows 7로 옮긴 이래로 이것과 관련된 수많은 문제가있었습니다. msado26.tlb 라이브러리는 더 이상 우리를 위해 일하지 않으므로 대신 msado60_Backcompat.tlb를 참조하도록 해당 라이브러리에 대한 참조를 변경해야했습니다. 그것은 잠시 동안 작동하는 것처럼 보였지만 이후 msado15.dll의 두 가지 다른 버전에 더 많은 문제가있었습니다. 최신 버전은 VB6 및 C++ 모두에서 코드를 깨는 것입니다.
이전 DLL을 삭제 했습니까? DLL을 삭제 한 다음 컴파일하면 새 GUID가됩니다. DLL이 이미 존재하면 guid는 기존 파일에서 읽습니다. 마지막 예제는 레지스트리에서 GUID를 조회하고 작동합니다. – Rob
ID 유지를 위해 이진 호환성을 사용합니다. 우리는이 문제를 추적했습니다. 자세한 내용을 추가하겠습니다. –