2015-05-28 105 views
1

我的公司有一個內部C#庫,我試圖使用win32com從CPython 2.7調用。我們有一個對象,我將調用Type1,它位於C#命名空間中,我將稱其爲Company.System.SubSystem1。這個對象的一個​​特定方法(我們稱之爲GetCurrentType2Object)返回一個類型爲Company.System.SubSystem2.Type2的對象。我的代碼如下:win32com COM方法調用返回對象類型的名稱而不是對象

import win32com.client 
type1_object = win32com.client.Dispatch("Company.System.SubSystem1.Type1") 
type2_object = type1_object.GetCurrentType2Object() 

問題是type2_object沒有被賦值爲Type2對象;它得到字符串「Company.System.SubSystem2.Type2」。

對於返回void,整數或枚舉值的同一對象還有其他方法,並且這些方法都顯得成功。沒有其他方法可以返回一個類的類型供我去嘗試,這是唯一的方法。

我試過在運行我的代碼之前在庫中使用makepy.py腳本,並且在得到這些之前它有它自己的問題;生成的文件似乎包含實際接口的一小部分,它不包含我需要的許多方法。微軟COM對象查看器顯示相同的子集,所以我不能責怪這個腳本,我放棄了試圖找出它。

我知道IronPython,我可能最終只是使用它而不是,因爲這將是一個非常迂迴的工作與.NET代碼的方式,但我真的很想了解這裏發生了什麼我做出任何決定,只是爲了滿足自己的好奇心。

回答

0

看來可能發生的事情是,win32com.client.dynamic正在決定我試圖調用的方法實際上是一個屬性,所以該方法不會正確調用。我並不確定,因爲我並不真正瞭解如何做出這樣的決定,但我能夠通過強制生成方法而不是屬性來解決問題。你可以通過調用win32com的_FlagAsMethod來做到這一點。對於這個問題的例子,這將是這樣的:

type1_object._FlagAsMethod("GetCurrentType2Object") 

做,試圖調用GetCurrentType2Object之前,一切工作正常。

相關問題