sta*_*oat 14 c++-cx windows-phone-8
我有兴趣从Windows Phone 8中的C++代码调用C#方法.我已经学会了如何通过C++代码中的委托声明将回调函数传递给C#中的C++代码,但是我想知道我是否可以做以下任何一项:
直接从C++代码调用某些方法.这将涉及以某种方式检查来自C++的C#对象化妆,对我来说似乎不太可能,但我想我无论如何都会问你们
触发C#代码中的事件,然后可以通过C#方法处理
使用调度程序在主UI线程中调用C#回调,以便回调可以修改UI元素
使用调度程序触发C#代码中的事件,(基本上是上述两点的合并)
简而言之,我正在寻找尽可能多的C++ - > C#通信技巧,因为你们可以抛弃我,我想要全部学习.:)
Pau*_*tts 20
通过在C#代码中获取一个对象来实现一个Windows RT接口,并传递对该对象的引用,可以通过一些设置来完成上述所有操作(如果我理解正确 - 不确定究竟是什么您想要使用Dispatcher示例 - 您可能希望将Dispatcher包装在C#端.
public interface class在C++中为C#定义一个C#实现(C++调用)(例如ICallback).public ref class在C++/CX头中定义一个C++来实现(C#来调用)(例如CppCxClass).添加一个方法CppCxClass,传递并存储一个ICallback.(显示C++全局变量是为了保证,我建议您查看一下,看看是否可以在代码库中找到更好的存储位置).
Run Code Online (Sandbox Code Playgroud)ICallback^ globalCallback; ... void CppCxClass::SetCallback(ICallback ^callback) { globalCallback = callback; }
在C#代码中引用WinRT库.
CppCxClass使用的实例var cppObject = new CppCxClass().ICallback(例如CSharpCallbackObject)的类.CSharpCallbackObjectdown 实例传递给C++.例如cppObject.SetCallback(new CSharpCallbackObject()).你现在可以用C调用C#globalCallback->CallCsharp(L"Hello C#");.您应该能够扩展ICallback和/或CppCxObject执行其余任务.
Rel*_*mes 16
在经历了很多令人头疼的问题之后,我认为值得在这里发布最终版本
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" );
Run Code Online (Sandbox Code Playgroud)
C#
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5544 次 |
| 最近记录: |