gpt4 book ai didi

.NET 应对向非托管 API 添加可选参数

转载 作者:行者123 更新时间:2023-12-05 01:31:58 25 4
gpt4 key购买 nike

我正致力于通过 COM 为第三方开发人员使用非托管 API 为某些软件提供可靠的 .NET 互操作。

以前该软件只支持第三方开发的 VBScript,因此他们已经习惯了能够添加新方法和可选参数来修复 API 中的功能问题。

然而,在 .NET 中,添加可选参数构成了重大更改(因为方法签名已更改)。如果 API 在 .NET 中,这可以通过使用重载方法轻松解决,但是因为 API 是非托管的,我们使用的是 COM 接口(interface),因此我不能使用重载。

API 变更政策对我没有任何影响

我考虑过但没有得到任何结果的事情:

  • 使用 Reflection Emit 在运行时添加重载 -据我所知,只有动态创建整个程序集才能做到这一点;考虑到 API 是类型库/COM 而不是真正的 .NET 程序集,这可能是不可能的。

  • 捕获并重新路由调用错误 - 当可选参数被“命中”时,错误包含将旧方法重定向到带有可选参数的新方法所需的所有信息。不幸的是,我的理解是一旦抛出错误就无法返回。

  • 包装类型库 - 我将能够提前知道 API 方法何时添加了可选参数。因此,我查看了是否可以以某种方式向类型库添加重载,或者可能将整个类型库包装在 .NET 代理中,并包含重载方法以在前/后可选参数方法之间进行转换。但是如果能做到,我实在是找不到办法了。

欢迎所有建议 - 我在这里变得非常绝望!

注意.NET 可以添加新方法,只是添加可选参数给我带来了麻烦。此外,我正在用 VB.NET 编写代码,但也可以愉快地使用 C# 等语言编写代码,如果它能让事情变得更容易的话。

最佳答案

尝试使用 Alias 关键字为每个参数配置声明一次函数。

Declare Function functionName1 Lib "libName" Alias "libFunctionName" (parameter configuration 1)
Declare Function functionName2 Lib "libName" Alias "libFunctionName" (parameter configuration 2)
...

然后根据调用中使用的参数调用合适的函数。

关于.NET 应对向非托管 API 添加可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17877599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com