저는 COM으로 볼 수있는 간단한 .NET 프로젝트 (클래스 라이브러리)를 작성했습니다. 그것은 VB6와 함께 작동합니다!ClassInterfaceType.AutoDual을 사용하면 VB6에서도 정말 나쁜 생각입니까?
코드는 다음과 같습니다 :
어셈블리가 제대로 서명[ComVisible(true)]
[ClassInterface(ClassInterfaceType::AutoDual)]
public ref class MyObject
{
// Some methods and values
}
(가 GAC에없는 경우 필요 없음) 및 (regasm MyProject.dll /tlb /codebase
) 등록.
그런 다음 TLB 파일은 내 VB6 프로젝트에서 참조되며 모두 정상입니다! 내 수업과 그 안에있는 공개 방법에 액세스 할 수있었습니다.
인터넷에서 많은 사람들은 ClassInterfaceType::AutoDual
을 사용하는 것이 버전을 사용하면 어셈블리를 사용하는 응용 프로그램을 손상시킬 수있는 잠재적 인 문제로 인해 좋지 않다고 말합니다.
하지만 제 경우에는 정말 문제입니까? 이 어셈블리는 VB6 프로젝트에서만 사용됩니다 (초기 바인딩에서).
새 릴리스가 나올 때마다 나는이 단계 (서명, 등록 등)를 수행합니다. 이 솔루션의 버전 관리 문제가 될 수 있습니까?
어쨌든, 나는 [GUID("...")]
속성을 쓸 수 있습니까?
GUID는 Visual Studio에서 자동으로 생성되므로 각 컴파일시 클래스가 동일한 GUID가 아닙니다. 맞아?
답장을 보내 주셔서 감사합니다. 명확히하기 위해 프로젝트에서 목표는 다음과 같습니다. 1) VB6에서 Intellisense 사용 2) 다음과 같은 객체 사용 : "Dim myobj As New MyObject". 그럼 내 해결책은 좋지, 안돼? –
나는 이미 내 답변에서 자동 완성 기능이 IntelliSense와 동일하며 GetObject를 사용하고 싶지는 않습니다. 분명히 AutoDual 사용을 주장합니다. –
많은 감사! 간단히 말해, 어셈블리를 제대로 제거하고 다시 설치하면 ('regasm'과 함께) 자동 생성 된 GUID 및 AutoDual을 사용하더라도 버전 관리에 아무런 문제가 없습니다. DispID는 어때? –