Почему Delphi Prism жалуется на несоответствие типов систем? - PullRequest
2 голосов
/ 17 февраля 2010

Я обнаружил странную ошибку компилятора в Delphi Prism 2010, которую не могу устранить. Ошибка - вызов метода для объекта, определенного в сторонней сборке, которая манипулирует специализированным форматом изображения. Сама сборка была скомпилирована для среды выполнения .Net 2.0.

Несмотря на предоставление правильного списка параметров, я постоянно получаю сообщение об ошибке, и ряд предупреждающих сообщений указывает, что список параметров неверен. IDE VS 2008 также отказывается выполнять завершение параметра, но корректно показывает прототип метода и позволяет добавлять метод с помощью Ctrl-Space. Ниже приведена сокращенная версия ошибок компилятора для иллюстрации проблемы:

Ошибка 1 (PE19) Нет перегруженного метода "GetTempMapOfIRSensor" с этими параметрами

Предупреждение 2 (PH2) «Лучшее соответствие» Image.GetTempMapOfIRSensor (var rectOnSensor: System.Drawing.Rectangle; вне среднего: System.Double; out minTempArrayIndex: System.Int32; out maxTempArrayIndex: System.Int32; requiredTempUnits: Image.TEMP_UNIT): массив System.Double "не соответствует параметру 1, параметр" System.Drawing.Rectangle "должен быть" System.Drawing.Rectangle "

Предупреждение 3 (PH2) «Лучшее соответствие» Image.GetTempMapOfIRSensor (var rectOnSensor: System.Drawing.Rectangle; вне среднего: System.Double; out minTempArrayIndex: System.Int32; out maxTempArrayIndex: System.Int32; requiredTempUnits: Fluke.Thermography.TEMP_UNIT): массив System.Double "не соответствует параметру 2, параметр" System.Double "должен быть" System.Double "

.... список похожих предупреждений для каждого оставшегося параметра

Странно, что компилятор жалуется на несоответствие типов для каждого параметра, но в сообщении об ошибке указывается, что имена типов параметров совпадают (например, параметр «System.Double» должен иметь значение «System.Double») .

Приветствуются любые предложения по устранению неполадок и решению этой проблемы. Рассматриваемый класс, кроме этого одного метода, кажется, работает хорошо во всех других отношениях. Я также могу создать метод в локальном классе с той же сигнатурой и вызвать его без ошибок.

Обновление:

Вызов метода с использованием отражения и того же списка параметров работает правильно. Это похоже на какую-то ошибку / ограничение компилятора.

1 Ответ

1 голос
/ 17 февраля 2010

Если в этой библиотеке есть перегрузки для параметров не-var / out & var или out с той же сигнатурой, отключите опцию для неявных параметров out / var и добавьте & var в места, где они необходимы , Это должно исправить, иначе запись QC обычно исправляется довольно быстро, если это ошибка.

...