我正在尝试从加载的.dll assembly调用COM对象上的方法。 问题与this one非常相似,只是我正在使用ironpython 2.7。而不是ironruby。
与该问题一样,我可以调用任何不带任何参数的属性或方法。
但是一旦方法需要至少一个参数,我收到一条错误消息:
无法将参数0转换为打开。
以下是示例代码:
import clr
import os
shpfilename = "C:/example.shp"
dllsfilename = "C:/mapwindow_dlls"
clr.AddReferenceToFileAndPath(os.path.join(dllsfilename, "Interop.MapWinGIS.dll"))
print "Interop.MapWinGIS.dll loaded: ", "Interop.MapWinGIS" in [assembly.GetName().Name for assembly in clr.References] # prints: True
import MapWinGIS
sf = MapWinGIS.ShapefileClass()
sf.Open(shpfilename, None) # raises upper error message
有谁知道为什么会这样?
我用谷歌搜索了一下,看起来问题可能与shpfilename
类型有关。所以我尝试传递shpfilename
by-reference:
shpfilenameRef = clr.Reference[System.String](shpfilename)
sf.Open(shpfilenameRef, None) # again, raises upper error message
但上面的错误信息仍然没有消失。
Open函数有这个签名:
Help on method-descriptor Open Open(...)
Open(self: ShapefileClass, ShapefileName: str, cBack: Callback) -> bool
// MapWinGIS.ShapefileClass
[DispId(11)]
[MethodImpl(MethodImplOptions.InternalCall)]
public virtual extern bool Open([MarshalAs(UnmanagedType.BStr)] [In] string ShapefileName, [MarshalAs(UnmanagedType.Interface)] [In] ICallback cBack = null);
答案 0 :(得分:0)
因此,基于签名,我根本不认为您需要参考,只需直接传递名称即可。您甚至不需要指定回调,默认为INSERT INTO Or_cars (carid, carDATE, model, AmountType(netamount, tax, totalamount))
SELECT carid, carDATE, model, netamount, tax, totalamount
FROM Cars;
。
我认为它应该像这样工作:
None