使用C#反射从DLL获取Struct

时间:2016-10-12 09:41:40

标签: c# reflection

我想访问一个DLL,它支持几个不同成员的不同结构,例如

typedef struct PanTilt
    {
    float PTCorrectionGradPan0;
    float PTCorrectionGradPan90;
    }   PanTiltValues;

typedef struct NewTime
    {
    BOOL Day;
    BOOL Rainy;
    }   NewTime;

具有不同名称的不同类型的成员。如何自动从程序集访问它们?我如何解析它们,并在我的C#代码中创建结构以将它们设置为我想要的值? 下面是我的开始,但我得到的最好的是获取一个包含其名称的字符串,但不知道我如何继续创建我自己的那些类型的对象,并有一些解析器告诉我什么成员(的它有哪种类型。

using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using System.Reflection;
using System.IO;

namespace CommandWriter
{
    public partial class CommandWriter : Form
    {
        public CommandWriter()
        {
            Type[] allCommands = ReadAllCommands();
            //InitializeComponent();
        }

        private Type[] GetTypesInNamespace(Assembly assembly, string nameSpace)
        {
            Type[] test = assembly.GetTypes();
            return assembly.GetTypes().Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal)).ToArray();
        }

        public Type[] ReadAllCommands()
        {
            var dllFile = new FileInfo(@"VMSystemTypeLib.Interop.dll");
            Assembly vmSystem = Assembly.LoadFile(dllFile.FullName);
            Type[] exported = vmSystem.GetExportedTypes().ToArray();
            return vmSystem.GetTypes().Where(t => t.Name.StartsWith("DP")).ToArray();
        }
    }
}

0 个答案:

没有答案