IronPython:"无法转换参数0以调用Open"错误

时间:2016-01-26 13:40:45

标签: c# dll com ironpython

我正在尝试从加载的.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);

1 个答案:

答案 0 :(得分:0)

因此,基于签名,我根本不认为您需要参考,只需直接传递名称即可。您甚至不需要指定回调,默认为INSERT INTO Or_cars (carid, carDATE, model, AmountType(netamount, tax, totalamount)) SELECT carid, carDATE, model, netamount, tax, totalamount FROM Cars;

我认为它应该像这样工作:

None