У меня есть несколько COM-библиотек (TISCOPELib и MIPPARAMLib), которые я использовал в C ++ (неуправляемые), и теперь я конвертирую в 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 ...
Я получил бы следующую ошибку:
Произошло необработанное исключение типа 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' в сборке DynamicMethods с анонимным размещением
Дополнительная информация: Не удается неявно преобразоватьвведите 'System .__ ComObject' в 'int'
. В этом случае System.__ComObject
должно быть IMipParameter
с int
в качестве свойства RawValue
.
Так каков лучший курс действий здесь?Используйте промежуточный шаг IMipParameter, используйте _Position, или есть другое решение?Если я использовал IMipParameter, есть ли способ получить статическую проверку типов?