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

时间:2015-10-28 08:12:42

标签: c# .net

存在一些导入的功能。它用于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);

1 个答案:

答案 0 :(得分:2)

不,您无法计算属性参数,这些参数的嵌入方式与正常执行代码的方式不同,必须保持不变。

相反,您应该创建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
{
    ....

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