如何调用在 mainpage.xaml.cpp 中声明的函数
How to call a function declared in mainpage.xaml.cpp
基本上:
MainPage.xaml.h 在引用 WrapperProject
的 MainProject 中
#includes yadda-yadda
#include "Wrapper.h"
namespace MyNamespace
{
public ref class MainPage sealed
{
public:
MainPage();
//...
DoAGreatThing(int greatThingId);
private:
//...
}
Wrapper.h 在 WrapperProject
#include "pch.h"
ref class Wrapper sealed
{
public:
static void InitInstance();
static Wrapper^ instance();
//...
}
Wrapper 如何调用 DoAGreatThing
方法?
改为文字墙:
我有一个包含多个项目的 Win8 应用程序。主应用程序项目是默认的基于 XAML 的 C++/CX 项目。
Wrapper 项目有一个单例,其文件包含在 mainpage.xaml 中以在某些情况下调用包装器方法。
我已经引用了一些只能在主应用程序项目中引用的库,因此只能从那里调用它的方法,但 wrapper 看不到这些文件 (mainpage.xaml)。我不能在我的包装器中包含主页,但我需要在其他项目中发生事件时调用上述库中的一些方法,它应该由包装器传递。
我未能在 mainpage.xaml.cpp 中创建函数指针并将其传递给包装器单例,因为它是 C++/CX 并且它不喜欢本机类型。
我未能创建 delegate/event,但委托声明应该在 mainpage.xaml.h 中完成,因此对包装器不可见。
我该怎么办?我如何从包装器调用主页函数?
我解决了问题:
App.xaml.cpp(知道 MainPage 并将其命名为 mMainPage)
void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ args)
{
//...
NativeClass::instance()->SetGreatThingDoer([=](int greatThingId){mMainPage->DoAGreatThing(greatThingId);});
//...
}
NativeClass.h 位于 WrapperProject
中的 wrapper 旁边
#include <functional>
//...
class NativeClass
{
public:
void SetGreatThingDoer(std::function<void(int)> func) {mDoAGreatThing = func;};
void DoAGreatThing(int greatThingId) {mDoAGreatThing(greatThingId);};
private:
std::function<void(int)> mDoAGreatThing;
//...
}
从 NativeClass 调用 DoAGreatThing
调用 MainPages DoAGreatThing
所有赞美lambdas!
基本上:
MainPage.xaml.h 在引用 WrapperProject
的 MainProject 中#includes yadda-yadda
#include "Wrapper.h"
namespace MyNamespace
{
public ref class MainPage sealed
{
public:
MainPage();
//...
DoAGreatThing(int greatThingId);
private:
//...
}
Wrapper.h 在 WrapperProject
#include "pch.h"
ref class Wrapper sealed
{
public:
static void InitInstance();
static Wrapper^ instance();
//...
}
Wrapper 如何调用 DoAGreatThing
方法?
改为文字墙:
我有一个包含多个项目的 Win8 应用程序。主应用程序项目是默认的基于 XAML 的 C++/CX 项目。
Wrapper 项目有一个单例,其文件包含在 mainpage.xaml 中以在某些情况下调用包装器方法。
我已经引用了一些只能在主应用程序项目中引用的库,因此只能从那里调用它的方法,但 wrapper 看不到这些文件 (mainpage.xaml)。我不能在我的包装器中包含主页,但我需要在其他项目中发生事件时调用上述库中的一些方法,它应该由包装器传递。
我未能在 mainpage.xaml.cpp 中创建函数指针并将其传递给包装器单例,因为它是 C++/CX 并且它不喜欢本机类型。
我未能创建 delegate/event,但委托声明应该在 mainpage.xaml.h 中完成,因此对包装器不可见。
我该怎么办?我如何从包装器调用主页函数?
我解决了问题:
App.xaml.cpp(知道 MainPage 并将其命名为 mMainPage)
void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ args)
{
//...
NativeClass::instance()->SetGreatThingDoer([=](int greatThingId){mMainPage->DoAGreatThing(greatThingId);});
//...
}
NativeClass.h 位于 WrapperProject
中的 wrapper 旁边#include <functional>
//...
class NativeClass
{
public:
void SetGreatThingDoer(std::function<void(int)> func) {mDoAGreatThing = func;};
void DoAGreatThing(int greatThingId) {mDoAGreatThing(greatThingId);};
private:
std::function<void(int)> mDoAGreatThing;
//...
}
从 NativeClass 调用 DoAGreatThing
调用 MainPages DoAGreatThing
所有赞美lambdas!