Я попробовал VS2015 с моим существующим решением, и у меня появились некоторые допустимые новые ошибки (например, недостижимый код, который компилятор не заметил ранее), но я также получаю ошибку, например, в этой строке:
bool bWasAlreadyLocked = false;
oEnv.LockDoc(oWarnings, oEventDoc, ref bWasAlreadyLocked);
Я получаю следующую ошибку:
Ошибка CS1503 Аргумент 3: невозможно преобразовать из 'ref bool [mscorlib, Версия = 4.0.0.0, Культура = нейтраль, PublicKeyToken = b77a5c561934e089] 'to 'ref bool [mscorlib, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089] '
Я не понимаю, почему это запустило бы эту ошибку, очевидно, что типы соответствуют. Является ли это ошибкой в новом компиляторе или изменилось поведение ключевого слова ref
?
Функция в этом случае является функцией С++, которая импортируется в С#, используя класс С#, полученный из класса С++. Это подпись:
void CBkgDocEnvX::LockDoc(
CFIWarningList ^oWarnings,
CBaseDoc ^oBaseDoc,
// Output
bool %rbWasAlreadyLocked)
Хорошо бы упомянуть, что я решил использовать VS2013 С++-компилятор для источников С++ в этом решении, поэтому сторона С++ должна быть такой же, как раньше. Я предполагаю, что что-то во взаимодействии между С# и С++ изменилось.