Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从.NET COM方法创建COM对象_C#_Com - Fatal编程技术网

C# 从.NET COM方法创建COM对象

C# 从.NET COM方法创建COM对象,c#,com,C#,Com,下面是一个代码示例 [Guid("159463FB-A87A-4BBB-BCA1-064CD84495FB")] public interface ISettingsFactory { ISettings GetSettings(string userName); } [Guid("FD11B979-0ED1-41fb-8EB0-1234512345D0")] public interface ISettings {

下面是一个代码示例

    [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; }
         }
     }    
问题在于从VB6代码创建SettingsFactory COM类并调用方法GetSettings(用户名)时

settings=factory.GetSettings(用户名);

key=settings.PrivateKey/我认为问题在于privateData.key没有正确编组。我看不到密钥类型的定义,但我猜它是某种数据的ptr,并且这些数据没有被正确编组。如果是这种情况,您可能需要使用Marhal.PtrToXXX选项之一

如果您想了解更多关于使用.net中的COM对象的信息,可以从MSDN文章开始

settings = factory.GetSettings(userName);
key = settings.PrivateKey //<--- Exception occurs saying "Read write from protected memory is not allowed" or something like this.