存在一些导入的函数。它用于AutoCAD 2009插件中。但对于较新的AutoCAD版本,则使用acdb18.dll
、acdb19.dll
和acdb20.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
{
....
这样,您只需选择一次正确的实现,每次都使用正确的方法,而无需切换。