gpt4 book ai didi

c++ - UWP - 跨 WinRT 模块重用字符串解析函数的建议方法

转载 作者:行者123 更新时间:2023-11-30 03:30:13 25 4
gpt4 key购买 nike

我的解决方案中有许多 C++ 项目是在我开始开发我的 UWP 应用程序之前由其他团队编写的,所有这些项目都使用 std::strings。因此,为了简化其他项目与我的 WinRT 模块之间的通信,我编写了一些字符串转换函数以从 std::strings 转换为 Platform::Strings,反之亦然。

我正在将我的 UWP 代码库转换为 WinRT 模块,我遇到了一个反复出现的问题:因为 WinRT 模块不允许您拥有具有公共(public) native 类型的类或函数,所以我无法拥有我的字符串函数可公开访问。 private、protected 或 internal 声明适合传递 native 类型,只是不适合 public。

我的许多模块需要向下通信到 native C++ 代码,我不想为每个需要 std::string 的文件一次又一次地重新定义我的字符串函数。

我可以做些什么来跨 WinRT 模块重用我的字符串函数吗?还有其他人遇到过类似的问题吗?非常感谢任何建议!谢谢

最佳答案

你有两个选择。

  1. 将这些函数内联,并在一个头文件中定义它们。然后,在您想要使用它们的任何地方包含头文件。这是一个更直接的解决方案,不需要您弄乱您的构建系统。

  2. 您可以将这些函数编译到您的一个 DLL 中,然后将它们导入到其他 DLL 中。让我们调用将函数放在“StringModule.dll”中的 DLL。您需要将这些函数放在 .cpp/.h 头文件对中,然后将该 .cpp 文件编译成 StringModule.dll。然后,在构建 StringModule.dll 时使用评估为 __declspec(dllexport) 的定义来注释您的函数,在构建所有其他 DLL 时使用评估为 __declspec(dllimport) 的定义。例如:

    #ifndef BUILDING_STRING_CONVERSIONS_DLL // This should be defined to 1 when building StringModule.dll
    #define BUILDING_STRING_CONVERSIONS_DLL 0
    #endif

    #if BUILDING_STRING_CONVERSIONS_DLL
    #define MY_STRING_API __declspec(dllexport)
    #else
    #define MY_STRING_API __declspec(dllimport)
    #endif

    namespace MyStringFunctions
    {
    MY_STRING_API Platform::String^ ConvertStdStringToPlatformString(const std::string& str);
    MY_STRING_API std::string ConvertPlatformStringToStdString(Platform::String^ str);
    }

当您构建 StringModule.dll 时,会在其旁边创建 StringModule.lib 文件。在构建所有使用字符串函数的 DLL 时,您必须将其路径作为参数传递给链接器。在您要使用 DLL 的所有地方,只需包含该头文件并照常使用它们即可。

关于c++ - UWP - 跨 WinRT 模块重用字符串解析函数的建议方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45157026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com