我需要用很大(超过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,
...
};
}