HAXE CPP-如何将大型文本或二进制资源嵌入代码



我需要用很大(超过44k)的文本初始化字符串,然后从中读取5个符号子字符串的序列。HAXE编译器会引发编译错误,例如"堆栈溢出,太复杂的源",如果我以静态字符串变量的初始化来执行此操作。

我正在使用CPP HAXE环境,因此我不能依靠NICE资产的OpenFL框架。而且我真的不想弄乱运行时文件系统操作。

是否可以将一些外部文件作为数据源(字符串或可能是字节),并获得对此数据的简单访问?

这似乎不是haxe的问题,而是CPP编译器 Visual Studio的问题。

我刚刚尝试生成50000个字符并在CPP中打印它,然后得到此错误:"错误C2026:字符串太大,尾随字符截断了".aspx

然后我尝试将其编译到Neko,并且它没有问题。

解决此问题的一种解决方案是将较长的字符串分成较长的字符串,并像" pique 1" " pipter 2" ...

等连接它们。

编辑:我目前无法测试它,但是我被告知每个编译器中都存在类似的限制

haxe应该能够处理其源中的较大字符串,因此,如果您有问题,我会尝试在小测试文件中隔离问题(没有其他代码说跟踪大字符串),然后在此处编辑您的问题或在Github上创建问题。

值得尝试的另一件事是,如果您的示例将其编译为Neko-这与CPP非常相似,但有时出现故障会出现在一个目标上,而不会出现在另一个目标上。

对于以低复合方式管理静态导入,您可以使用haxe.resource(http://api.haxe.org/haxe/resource.html),或者我有一个称为" compiltime"的库,让您编写static var myBigString = CompileTime.readFile("myBigFile.txt"),一个宏将将其全部包含在编译文件中,就好像您直接将其键入源代码。

我也遇到了这个问题。在某些情况下,资源 - 是坏主意,因为例如您将需要Windows/Linux的不同实现。

我有更多好的解决方案。

您可以这样做:

 unsigned char openClCode[] = 
 {0x23,0x64,0x65,0x66,0x69,0x6E,0x65,0x20,0x55,0x53,
  0x23,0x64,0x65,0x66,0x69,0x6E,0x65,0x20,0x55,0x53,
  ...
 };

在这种情况下,我知道您没有限制。我只是试图用大约500k的代码制作文件。因此,输出标头文件,该变量位于我的位置约为3 MB。

您可以使用" char Array's"将字符串转换为标头的小程序。我使用这种好方法来例如将我的OpenCL代码保存到我的应用程序中,没有任何资源,也没有任何其他文件位置的文件。我只是在C 程序中使用C阵列将我的代码保存到我的应用程序中。

所以在我的CL应用程序中,我喜欢这样:

__kernel void TestMul(__global const float* a, __global const float* b, __global float* c, int iNumElements)
{

在我的标题文件中,此转换为这样:

#pragma once
namespace Scl
{
const char g_clCode_ProgTestComonent[] =
{
    0x5F, 0x5F, 0x6B, 0x65, 0x72, 0x6E, 0x65, 0x6C, 
    0x20, 0x76, 0x6F, 0x69, 0x64, 0x20, 0x54, 0x65, 
    0x73, 0x74, 0x4D, 0x75, 0x6C, 0x28, 0x5F, 0x5F, 
    0x67, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x20, 0x63, 
    0x6F, 0x6E, 0x73, 0x74, 0x20, 0x66, 0x6C, 0x6F, 
...
};
}

最新更新