에서 COM 객체를 생성하는 코드 샘플 방법 GetSettings에게 (사용자 이름).NET의 COM 방법 다음
settings = factory.GetSettings(userName);
key = settings.PrivateKey //<--- Exception occurs saying "Read write from protected memory is not allowed" or something like this.
문제 VB6 코드에서 SettingsFactory COM 클래스를 생성하고 호출 할 때 문제가
[Guid("159463FB-A87A-4BBB-BCA1-064CD84495FB")]
public interface ISettingsFactory
{
ISettings GetSettings(string userName);
}
[Guid("FD11B979-0ED1-41fb-8EB0-1234512345D0")]
public interface ISettings
{
string PrivateKey {get;}
}
[Guid("782937826-705F-4be2-1234-A748332D6D1")]
[ClassInterface(ClassInterfaceType.None)]
public class SettingsFactory : ISettingsFactory
{
public ISettings GetSettings(string userName)
{
return new Settings(userName);
}
}
[Guid("8BDC1F18-48FD-4a49-8DF3-D81C6321657B")]
[ClassInterface(ClassInterfaceType.None)]
public class Settings : ISettings
{
private readonly PrivateData privateData;
public Settings(string userName)
{
privateData= PrivateData.Load(userName);
}
public string PrivateKey
{
get { return privateData.Key; }
}
}
에게 있습니다 GetSettings 메서드에서 Settings 인스턴스를 SettingsFactory 필드에 저장하면 GC가 해당 인스턴스를 수집하지 않습니다. 아무도 왜 이런 일이 일어나는 지 알고 있습니까? GC가 COM에 노출 된 개체를 수집하는 이유는 무엇입니까? GetSettings가 호출 된 후 RCW가 Settings 개체의 참조 번호를 증가시키지 않았습니까?