3

在运行时,我得到了一个String名称、一个排序的对象数组和一些关于本机函数的附加信息(dllpath、calltype 等)。

让我们假设所有信息都在一个CallInformation对象中。

我怎样才能调用这个本机函数?

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

Web 上有关调用本机函数的常用信息涉及调用

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

我需要的是

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

2 回答 2

2

解决方案将涉及 Reflection.Emit。您必须根据您的 CallInformation 动态生成一个包含使用适当 DllImport 属性装饰的 PInvoke 签名的类。抱歉,没有代码,但考虑到冗长的 Reflection.Emit API,它不能归结为值得发布的内容。

于 2012-08-07T17:20:00.653 回答
1

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

于 2012-08-07T17:17:22.393 回答