c# - Windows 手机 8.1 : C# Callback with IList variable fails to cast to IVector

标签 c# c++ list windows-runtime windows-phone-8.1

我有一个声明回调接口(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/

相关文章:

c# - uri 操作类 .net

c# - 如何使 EAP 方法同步工作

c# - Webclient 的 DownloadStringCompleted 事件处理程序从未调用过

c# - 动态传递对象类型

c++ - 多重继承歧义错误

c# - 改变 List<Point> 项的值

list - SML/NJ - 从末端到开始访问的有效方法或数据结构

c++ - 构建优化的 Qt4 - "./configure"标志及其含义

c++ - 什么是 Glew、Glut 和 glfw3?哪些在 Opengl 3/4 中已被弃用

python - 当列表在 python 中有索引时执行循环