如何通过在C#中反映COM对象来读出所有属性名称?如果我知道名字,我知道如何获得财产.
comObject.GetType().InvokeMember("PropertyName", System.Reflection.BindingFlags.GetProperty, null, comObject, null);
Run Code Online (Sandbox Code Playgroud)
但什么时候我想转储所有属性?
PropertyInfo[] properties = t.GetProperties();
Run Code Online (Sandbox Code Playgroud)
这种方式不适用于Com-Objects.如果我做一个GetMembers()我得到这些成员:
Name: GetLifetimeService
Name: InitializeLifetimeService
Name: CreateObjRef
Name: ToString
Name: Equals
Name: GetHashCode
Name: GetType
Run Code Online (Sandbox Code Playgroud)
对克里斯说
我通过COM连接到某个程序并接收System .__ ComObject.我知道它的几种方法,所以我可以这样做:
object result = obj.GetType().InvokeMember("SomeMethod", BindingFlags.InvokeMethod, null, obj, new object[] { "Some string" });
Run Code Online (Sandbox Code Playgroud)
并且喜欢这个
dynamic dyn = obj;
dyn.SomeMethod("Some string");
Run Code Online (Sandbox Code Playgroud)
两种方法都很好.但是如何确定com对象的内部类型信息并通过其所有成员进行枚举?
我试过这个:
[ComImport, Guid("00020400-0000-0000-C000-000000000046"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IDispatch
{
void Reserved();
[PreserveSig]
int GetTypeInfo(uint nInfo, int lcid, [MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(TypeToTypeInfoMarshaler))] out System.Type typeInfo);
}
...
IDispatch disp = (IDispatch)obj;
Type t;
disp.GetTypeInfo(0, 0, out t);
Run Code Online (Sandbox Code Playgroud)
但是t最后是空的.谁能帮我?