我尝试使用VS2015运行我的现有解决方案并出现了一些新的有效错误(例如编译器之前未检测到的“不可访问代码”),但是我也在这一行代码上遇到了一个错误:
bool bWasAlreadyLocked = false;
oEnv.LockDoc(oWarnings, oEventDoc, ref bWasAlreadyLocked);
我收到了以下错误:
Error CS1503 第三个参数:无法从“ref bool [mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]”转换为“ref bool [mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]”
我看不出为什么会抛出这个错误,因为类型显然是匹配的。这是新编译器中的一个错误吗,还是ref
关键字的行为已经改变了?
在这种情况下,函数是一个 C++ 函数,使用从 c++ 类派生的 C# 类导入到 C# 中。其签名如下:
void CBkgDocEnvX::LockDoc(
CFIWarningList ^oWarnings,
CBaseDoc ^oBaseDoc,
// Output
bool %rbWasAlreadyLocked)
可能值得一提的是,我目前选择在解决方案中使用VS2013 c++编译器来编译c++源代码,因此c++方面应该与之前相同。我猜测是c#和c++之间的互操作发生了变化。
LockDoc
的签名是什么? - Patrick Hofmanbool %rbWasAlreadyLocked
被编译成了一个修改过的类型(在 CIL 中为modreq
),而这些类型通常与 C# 不兼容。你能否将程序集上传到某个地方? - IS4