Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone 8 从C+调用C#方法+;WP8中的代码 我很感兴趣的是在Windows Phone 8中用C++代码调用C方法。我已经学会了如何通过C++代码中的委托声明将一个回调函数传递给C++代码,但是我想看看我是否可以做以下任何一项: < P>直接从C++代码调用某些方法。这将涉及到从C++中检查C对象的组成,我觉得不太可能,但我想我还是会问你们所有的问题< /p> 。_Windows Phone 8_C++ Cx - Fatal编程技术网

Windows phone 8 从C+调用C#方法+;WP8中的代码 我很感兴趣的是在Windows Phone 8中用C++代码调用C方法。我已经学会了如何通过C++代码中的委托声明将一个回调函数传递给C++代码,但是我想看看我是否可以做以下任何一项: < P>直接从C++代码调用某些方法。这将涉及到从C++中检查C对象的组成,我觉得不太可能,但我想我还是会问你们所有的问题< /p> 。

Windows phone 8 从C+调用C#方法+;WP8中的代码 我很感兴趣的是在Windows Phone 8中用C++代码调用C方法。我已经学会了如何通过C++代码中的委托声明将一个回调函数传递给C++代码,但是我想看看我是否可以做以下任何一项: < P>直接从C++代码调用某些方法。这将涉及到从C++中检查C对象的组成,我觉得不太可能,但我想我还是会问你们所有的问题< /p> 。,windows-phone-8,c++-cx,Windows Phone 8,C++ Cx,触发C#代码中的事件,然后可由C#方法处理 使用调度程序在主UI线程中调用C#回调,以便回调可以修改UI元素 使用调度程序触发C代码中的事件(本质上是上述两点的合并) 简而言之,我在寻找很多C++和C语言的通信技巧,就像你们可以扔我一样,我想学习所有这些。p> 通过在C#代码中获取一个对象来实现Windows RT接口,并传递对该对象的引用,可以通过一点设置来完成上述所有操作(如果我理解正确-不确定如何使用Dispatcher示例-您可能希望在C#端包装Dispatcher) 创建Window

触发C#代码中的事件,然后可由C#方法处理

  • 使用调度程序在主UI线程中调用C#回调,以便回调可以修改UI元素

  • 使用调度程序触发C代码中的事件(本质上是上述两点的合并)

  • 简而言之,我在寻找很多C++和C语言的通信技巧,就像你们可以扔我一样,我想学习所有这些。p> 通过在C#代码中获取一个对象来实现Windows RT接口,并传递对该对象的引用,可以通过一点设置来完成上述所有操作(如果我理解正确-不确定如何使用Dispatcher示例-您可能希望在C#端包装Dispatcher)

  • 创建Windows运行时组件库
  • 在C++/CX头中定义一个公共接口类,供C#实现(C++调用)(例如,
    ICallback
  • 在C++中用C++(C++/CX)头定义<代码>公共REF类< /代码>实现(C→调用)(例如<代码> CppCxClass < /C> >)
  • CppCxClass
    中添加一个方法,该方法传递并存储
    ICallback
    。(C++的全局变量显示为一致性,我建议您查看一下,看看是否可以找到更好的地方来存储代码库)。< /P>
  • 在C#代码中引用WinRT库

  • C#代码:使用
    var cppObject=new CppCxClass()
    创建
    CppCxClass
    的实例
  • C#code:创建一个实现
    ICallback
    (例如
    CSharpCallbackObject
    )的类
  • C代码:将一个实例>代码> cSCAPCARLADObjult< /C> > C++。例如,
    cppObject.SetCallback(新的CSharpCallbackObject())

  • 您现在可以使用
    globalCallback->CallCsharp(L“Hello C”)调用C。您应该能够扩展
    ICallback
    和/或
    CppCxObject
    来完成其余的任务。

    在费尽周折试图找出所需代码之后,我认为值得在这里发布最终版本

    C++/CX

    //.h
    [Windows::Foundation::Metadata::WebHostHidden]
    public interface class ICallback
    {
    public:
        virtual void Exec( Platform::String ^Command, Platform::String ^Param);
    };
    //.cpp
    ICallback ^CSCallback = nullptr;
    void Direct3DInterop::SetCallback( ICallback ^Callback)
    {
        CSCallback = Callback;
    }
    //...
    
    if (CSCallback != nullptr)
        CSCallback->Exec( "Command", "Param" );
    
    C#


    伟大的这几乎回答了我所有的问题!最后一点是,如果我可以像在C#中一样使用某种调度程序,以便在主UI线程中调用这些回调。找到了调度程序问题的解决方案:非常感谢!我一直在寻找这种回调技术,但在其他任何地方都找不到合适的描述。可能我是一个C#noob,但ICallback需要什么名称空间?这个解决方案的完整实现+演练:这肯定是,因为像我这样的人也会遇到同样的问题,你为我节省了大量时间。谢谢。如果你能回答相关的问题,那就太好了@
    //.h
    [Windows::Foundation::Metadata::WebHostHidden]
    public interface class ICallback
    {
    public:
        virtual void Exec( Platform::String ^Command, Platform::String ^Param);
    };
    //.cpp
    ICallback ^CSCallback = nullptr;
    void Direct3DInterop::SetCallback( ICallback ^Callback)
    {
        CSCallback = Callback;
    }
    //...
    
    if (CSCallback != nullptr)
        CSCallback->Exec( "Command", "Param" );
    
    public class CallbackImpl : ICallback
    {
        public void Exec(String Command, String Param)
        {
            //Execute some C# code, if you call UI stuff you will need to call this too
            //Deployment.Current.Dispatcher.BeginInvoke(() => { 
            // //Lambda code
            //}
        }
    }
    //...
    CallbackImpl CI = new CallbackImpl();
    D3DComponent.SetCallback( CI);