如何从C#调用编译时未知的本机函数

时间:2012-08-07 17:14:30

标签: c# interop pinvoke native

在运行期间,我提供了一个String名称,一个排序的对象数组和一些有关本机函数的附加信息(dllpath,calltype等)。

假设所有信息都在CallInformation对象中。

我如何调用此原生函数?

请注意: - 运行前我没有提供dll。 - 运行前没有提供呼叫信息。 - 我在运行时之前不知道ammount或调用参数的类型。 - 我不知道运行前的返回类型。

关于调用本机函数的usual information on the web处理调用

  • 已知dll中已知的函数类型
  • 未知dll中的已知函数类型

我需要的是

  • 未知dll中的未知函数类型

2 个答案:

答案 0 :(得分:2)

解决方案将涉及Reflection.Emit。您必须动态生成一个包含PInvoke签名的类,该签名使用基于CallInformation的相应DllImport属性进行修饰。 很抱歉没有代码,但考虑到详细的Reflection.Emit API,它无法归结为值得发布的内容。

答案 1 :(得分:1)

动态制作代理签名并使用反射调用它 只需查看如何动态创建委托,如何加载本机函数,如何使用反射调用函数并将它们连接在一起。