reflection - 如何确定 ConstructorInfo 对象是否具有非托管参数?

标签 reflection c++-cli unmanaged

我的应用程序在运行时使用反射来分析 c++/cli 代码。
我需要确定一个类型是否有一个没有非托管参数(指针等)的构造函数,因为我想稍后使用:

ConstructorInfo constructorInfo;  
// ...  
var ret = constructorInfo.Invoke(BindingFlags..., null, myParameters, null);  

如果构造函数有一个指向非托管对象的指针作为参数,当我将 null 传递给它时会出现转换异常。

那么我如何确定呢?没有 IsManaged... 并且 IsPointer 在这种情况下没有帮助。

最佳答案

不清楚您的问题究竟是什么,但这里有一个简短的演示程序,显示通过 null到一个构造函数,它接受一个指针作为参数并用 IsPointer 检测它:

using System;
using System.Reflection;

namespace pointers
{
    unsafe class Program
    {
        public Program(int* x)
        {
            Console.WriteLine("It worked!");
        }

        static void Main(string[] args)
        {
            ConstructorInfo[] c = typeof(Program).GetConstructors();
            c[0].Invoke(BindingFlags.Default, null, new object[] { null }, null);
            Console.WriteLine(c[0].GetParameters()[0].ParameterType.IsPointer);
        }
    }
}

它打印:它起作用了!
真的

关于reflection - 如何确定 ConstructorInfo 对象是否具有非托管参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5925862/

相关文章:

Java:静态嵌套类和反射: "$"与 "."

C# 打印委托(delegate)

objective-c - Objective-C - 反射和覆盖方法?

.net - 如何从流中加载非托管 DLL?

c# - 非托管 C++ 代码上的 NullReferenceException

java - Java 中的反射——意外的输出

c++ - 如何卸载托管的c++ dll?

winforms - 如何从线程设置 ToolStripProgressBar 的值?

performance - C# 和 C++ 可以互操作高性能代码吗?

c++ - 尝试将非托管 C++ 类转换为托管 C++ 类时出现奇怪的错误(用于 .net)