2012-07-02 39 views
1

使用Swig包裝C++代碼時,可能使用使用%extend。有可能0123'使用%typemap(cscode)使用Swig爲C++代碼構建C#包裝時,是否可以將代碼添加到現有方法?

如果包裝類中已經存在一個方法,有沒有辦法添加額外的代碼行?

例如,我的C#包裝方法是這樣的:

public void ItemChanged(CollectionObject collectionObject, string propertyName) { 
    mynamespacePINVOKE.mynamespace_DataObjectCollection_ItemChanged(swigCPtr, CollectionObject.getCPtr(collectionObject), propertyName); 
    if (mynamespacePINVOKE.SWIGPendingException.Pending) throw mynamespacePINVOKE.SWIGPendingException.Retrieve(); 
    } 

我想添加一行代碼:

public void ItemChanged(CollectionObject collectionObject, string propertyName) { 
    mynamespacePINVOKE.mynamespace_DataObjectCollection_ItemChanged(swigCPtr, CollectionObject.getCPtr(collectionObject), propertyName); 
    if (mynamespacePINVOKE.SWIGPendingException.Pending) throw mynamespacePINVOKE.SWIGPendingException.Retrieve(); 
    **insert my line of code here** 
    } 

回答

1

爲了寫你自己的,你的版本」需要確保它不會與默認的衝突發生衝突。我認爲最簡單的方法是使ItemChanged專用/使用%csmethodmodifiers%rename保護以隱藏生成的默認包裝版本。一旦隱藏。

然後,您可以使用cscode類型映射安全地編寫自己的ItemChanged版本,該映射首先調用私有版本,然後根據需要調用附加代碼。

這是迄今爲止解決問題的最簡潔的方法 - 只能將代碼直接注入生成的代碼的方法是作爲參數/返回值編組的一部分 - 設置傳入的參數,清理後或處理返回值。用這些類型映射之一來注入一些代碼會相當混亂。

相關問題