存在一些导入的功能。它用于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);
答案 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
{
....
这样你只需选择一次正确的实现,每次都可以使用正确的方法而无需切换。