存在任何动态计算属性参数的方法

本文关键字:参数 方法 属性 计算 任何 动态 存在 | 更新日期: 2023-09-27 18:19:30

存在一些导入的函数。它用于AutoCAD 2009插件中。但对于较新的AutoCAD版本,则使用acdb18.dllacdb19.dllacdb20.dll。当然,我可以为每个AutoCAD版本添加类似的导入记录,但可能存在更方便的方式,动态替换18、19或20而不是17?我认为这是不可能的,但我问我的问题是肯定的。

[DllImport("acdb17.dll", CallingConvention = CallingConvention.Cdecl, 
EntryPoint = "?acdbSetDbmod@@YAJPAVAcDbDatabase@@J@Z")]
private static extern Int32 acdbSetDbmod17x86(IntPtr db, Int32 newDbMod);

存在任何动态计算属性参数的方法

不,您无法计算属性参数,这些参数以与正常执行代码不同的方式嵌入,并且必须是常量。

相反,您应该创建4个不同的方法,每个方法对应一个这样的库,并让周围的代码确定要调用哪一个。

即。像这样的东西:

[DllImport("acdb17.dll", CallingConvention = CallingConvention.Cdecl, 
EntryPoint = "?acdbSetDbmod@@YAJPAVAcDbDatabase@@J@Z")]
private static extern Int32 v17_acdbSetDbmod17x86(IntPtr db, Int32 newDbMod);
[DllImport("acdb18.dll", CallingConvention = CallingConvention.Cdecl, 
EntryPoint = "?acdbSetDbmod@@YAJPAVAcDbDatabase@@J@Z")]
private static extern Int32 v18_acdbSetDbmod17x86(IntPtr db, Int32 newDbMod);
switch (version)
{
    case 17: v17_acdbSetDbmod17x86(...);
    case 18: v18_acdbSetDbmod17x86(...);
             ^-+^
               |
               +-- notice the prefix to the methods

或者,您应该创建4个不同的类,它们都实现相同的接口,并在启动时选择正确的类:

public class AutoCADAPI17 : IAutoCADAPI
{
    ....
public class AutoCADAPI18 : IAutoCADAPI
{
    ....

这样,您只需选择一次正确的实现,每次都使用正确的方法,而无需切换。