【发布时间】:2014-11-18 09:18:14
【问题描述】:
我用我现有的解决方案尝试了 VS2015,我得到了一些有效的新错误(比如编译器之前没有捕获的无法访问的代码),但我也得到了一个错误,例如在这一行:
bool bWasAlreadyLocked = false;
oEnv.LockDoc(oWarnings, oEventDoc, ref bWasAlreadyLocked);
我收到以下错误:
错误 CS1503 参数 3:无法从 'ref bool [mscorlib, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]' 'ref bool [mscorlib,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089]'
我看不出它为什么会抛出那个错误,显然类型确实匹配。这是新编译器中的错误还是 ref 关键字的行为发生了变化?
本例中的函数是一个 C++ 函数,它使用从 c++ 类派生的 c# 类导入到 C#。它的签名是这样的:
void CBkgDocEnvX::LockDoc(
CFIWarningList ^oWarnings,
CBaseDoc ^oBaseDoc,
// Output
bool %rbWasAlreadyLocked)
值得一提的是,我现在选择对解决方案中的 c++ 源代码使用 VS2013 c++ 编译器,因此 c++ 端应该与以前相同。我的猜测是 c# 和 c++ 之间的互操作发生了一些变化。
【问题讨论】:
-
LockDoc的签名是什么? -
查了一下,是一个C++函数
-
而
%似乎是一个c++ 跟踪运算符。不知道如何在 C# 中处理它。 -
嗯,这是一个错误。您确实需要考虑错误消息也可能被窃听。 C++ bool 与托管 bool 不同,您可能通过将其声明为 System::Boolean 来获得成功。尽管尚不清楚您使用的是 C++/CX 还是 C++/CLI。使用 connect.microsoft.com 报告测试版错误。
-
不幸的是,我到处都有这个问题,即使是我自己的类型。发送报告。