- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个声明回调接口(interface)的 C# windows phone 8.1 Visual Studio (2013) 项目
public interface ICallBack
{
/// <summary>
/// The Child Callback must override this method and this will be fired when time comes
/// </summary>
/// <param name="files">The resultant files </param>
/// <param name="code">Error code</param>
void GotFileList(FileType type, IList<FileInfo> files, ErrorCode code);
}
我有一个按如下方式实现它的 C++/CX 包装器:
ref class CallbackImpl sealed : ICallBack
{
private:
CallbackImpl(){}
public:
virtual void GotFileList(FileType type, Windows::Foundation::Collections::IVector<Object^>^ files, ErrorCode code);
}
我的问题是,在 Release 构建时,当 C# 调用 ICallback::GotFileList
_callback.GotFileList(fileType, result as IList<FileInfo>, ErrorCode.EC_NO_ERROR);
它抛出异常 System.InvalidCastException: Specified cast is not valid
。异常(exception)是指将 IList 转换为 IVector。
调试没问题;意思是,我可以将值添加到内部 IList 并调用 ICallback::GotFileList 并且 IList 值在 C++ IVector 中没有任何问题。
我比较了 Release/Debug 项目属性(在所有项目中:C# 核心库、C++/CX 包装器和 C++/CX 应用程序),没有发现任何只能解释 Release 构建异常的差异。
有什么想法吗?
最佳答案
我找到了简单的答案。由于 ILIst 是专有数据类型 FileInfo
它无法转换为 IVector。一旦我将接口(interface)函数签名更改为 IList<Object>
而不是 IList<FileInfo>
(以及分别在 C++ 包装器中的 IVector),一切正常。
这是新的代码片段:
public interface ICallBack
{
/// <summary>
/// The Child Callback must override this method and this will be fired when time comes
/// </summary>
/// <param name="files">The resultant files </param>
/// <param name="code">Error code</param>
void GotFileList(FileType type, IList<Object> files, ErrorCode code);
}
C++ 包装器:
ref class CallbackImpl sealed : ICallBack
{
private:
CallbackImpl(){}
public:
virtual void GotFileList(FileType type, Windows::Foundation::Collections::IVector<Object^>^ files, ErrorCode code);
}
关于c# - Windows 手机 8.1 : C# Callback with IList variable fails to cast to IVector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32195576/
我有 2 IVector s,我想用一个的所有内容替换另一个的内容。 ReplaceAll方法似乎可行。 所以我尝试了以下方法: IVector my_ivector1 = winrt::single
我目前正在 Visual Studio Community 2017 for Windows 10 版本 10.0.16299.0 下开发 Windows 10 UWP C++ 项目。 以下过程:我的
如何从 IVector^ 转换为 Vector^?文档涵盖了隐式工作的相反情况,但是当我尝试隐式转换和编译时,这种情况不会编译,但当我尝试转换它时会引发异常。我查看了引用资料,但无法涵盖这一点。 这样
我是 Tensorflow 和 Theano 的新手。 Tensorflow 中的 Theano.tensor.ivector 等价物是什么? 例如, x = Theano.tensor.ivecto
我是 C++ 编程的新手。这些年来我做过一些 C#,但我不会说我精通它。我正在尝试将一些代码从 native c++ 更改为 C++/CX,并不断遇到很多编译器错误,特别是与 vector 有关的错误
我的 windows 8.1 和 windows phone 8.1 (C#) 通用商店项目使用了一个 windows 运行时组件 (C++),它由一个 C 库和一个为 winrt 环境提供对 C 代
我有一个声明回调接口(interface)的 C# windows phone 8.1 Visual Studio (2013) 项目 public interface ICallBack
我是一名优秀的程序员,十分优秀!