簡體   English   中英

COM Interop用法(從C ++轉換為C#/。NET)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM