[英]COM Interop usage (converting from C++ to C#/.NET)
我有一些在C ++中使用的COM庫(TISCOPELib和MIPPARAMLib)(非托管),現在我正在轉換為C#。
此代碼段適用於C ++:
TISCOPELib::IFilterBlockCasette *casette;
... inialization ...
int position = casette->Position;
... other stuff ...
在C#中,我將必須執行以下操作之一:
TISCOPELib.IFilterBlockCasette casette = microscope.FilterBlockCasette1; // Init stuff.
MIPPARAMLib.IMipParameter param = casette.Position;
int position = param.RawValue;
... other stuff ...
要么
TISCOPELib.IFilterBlockCasette casette = microscope.FilterBlockCasette1; // Init stuff.
int position = casette._Position;
... other stuff ...
如果我這樣做:
TISCOPELib.IFilterBlockCasette casette = microscope.FilterBlockCasette1; // Init stuff.
int position = casette.Position;
... other stuff ...
我會收到以下錯誤:
匿名托管的DynamicMethods程序集中發生了類型為'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'的未處理異常
附加信息:無法將類型'System .__ ComObject'隱式轉換為'int'
在這種情況下, System.__ComObject
應該是具有int
作為RawValue
屬性的IMipParameter
。
那么,最好的做法是什么? 使用IMipParameter中間步驟,使用_Position,還是有其他解決方案? 如果我使用IMipParameter,有沒有辦法可以進行靜態類型檢查?
嘗試
int position = (int)casette.Position.RawValue;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.