问题标签 [blitzmax]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
250 浏览

string - 字符串错误地转换为浮点数?(Blitzmax - 反思)

我在 Blitzmax 中有一个小问题。我尝试读取一个 INI 文件,如果我读取浮点数,它们会以一种非常奇怪的方式进行转换。文件中相关的行如下所示:

这个的输出看起来像这样:

我用来阅读的代码与反射一起工作,看起来像这样:

我发现,只有在“。”之后的数字才会发生这种情况。不等于 5 或​​ 0。我无法解释这种行为,因为如果我不使用反射,它可以正常工作。

有人可以帮我吗?

0 投票
2 回答
140 浏览

multithreading - 为什么我的对象似乎从一行到下一行变为 NULL?- 会不会是硬件?

首先要说的是:我使用一种相对未知的语言进行编程:Blitzmax,这是一种面向对象的基本方言。

我的问题如下:我编写了一个在自己的线程中运行的调试管理器。因此,从程序中的每个位置(这将是一场游戏),您都可以将调试或错误消息添加到经理的队列中。在它自己的线程中,它将从队列中获取消息并通过将它们写入文件来处理它们,并且(如果消息具有当前选择的 Debuglevel、Debugcategory 和 outputcategory,它们只是枚举)将其写入控制台。

现在我在三个系统上测试了这个程序:我的台式电脑,它有 Windows 8 作为操作系统,我自己的笔记本电脑有 Windows 7 和一个朋友的笔记本电脑也有 Windows 7。在我的电脑和我朋友的笔记本电脑上一切都很好。但是在我自己的笔记本电脑上,几乎每次都会在经理处理消息时出现“EXCEPTION_ACCESS_VIOLATION”错误。有时程序运行良好,但大多数时候它会因这个错误而崩溃。即使在调试模式下,也不会显示任何行或堆栈跟踪,这使得调试非常困难。

我将所有需要的类分解为最少的属性和功能,以便更容易找到问题。现在队列只是一个列表(在 Blitzmax 中内置),消息只有一个属性,它是一个字符串。此外,调试管理器仅将消息写入控制台,而不将其传递给将其写入文件等的进程方法。

所以实际需要的代码如下。

这是消息:

这是队列:

这是向调试管理器添加消息的方法:

现在这里是调试管理器的(当前较小的)更新功能:

所以在它在更新函数中说“这里是错误”的位置。问题如下:如果此行被注释掉或删除,程序在我的笔记本电脑上运行良好,没有错误发生。但是如果有这条线,那么大多数时候都会发生错误。例如,在以下情况下会抛出“EXCEPTION_ACCESS_VIOLATION”:堆栈溢出发生在某处。或者当您尝试访问 NULL 对象时。实际上所有试图从被禁止的内存中读取或写入的东西。真正奇怪的是:仅在前几行,我检查了我从队列中得到的消息是否为 NULL。如您所见,它应该会引发错误。但它永远不会。

有没有人见过这样的行为?我无法解释。正如我所说:在这种情况下调试真的很难。我可以把它分解成更小的类,最后是你在这里看到的代码。我也不能只用调试器一步一步地通过程序,因为这样就不会发生错误。有人可能会想到会导致这一刻错误的事情吗?

我知道,这是很多代码,但我不能让它更短。

0 投票
1 回答
300 浏览

c++ - Writing/reading binary bytes/ints/longs to/from file stream in C++

So I've only recently started to try C++ and I've already learned the basics. All I want to know is how can I write/read bytes/ints/longs to/from a file.

First of all, I'd like to tell you why do I need it. Basically I want to read data from a file which has a special format in it. All the data is written in binary in that file.

File format specification

I've already written that program in another language and I'd like to re-write my program in C++. The language I used previously is called BlitzMax and in that language function are already implemented and just called WriteByte, ReadByte, WriteInt, ReadInt etc.. If you guys will be kind enough to write (or at least link me the source) the functions I need, it will be much appreciated. And if you will write them for me, can you also explain how they work?

Thank you very much to everyone who will help me! :)

Edit: Here, as requested, the code that is somewhat does what I need. It does write the int 50 in binary to a file, but that's as far as I could go to. I still can't understand some parts (code was found in google, I edited it a bit). And I still need a way to write bytes and longs.

0 投票
1 回答
135 浏览

linker - 指定文本段的最小起始地址

如何告诉 lld 将代码放置在某个位置或上方?

我有一段遗留代码依赖于一段相当有问题的逻辑:某个函数可以接收一个值,该值要么表示函数指针数组的索引,要么实际上是函数指针。该函数通过检查值是否小于来确定值的类型0x10000;如果是这样,它是一个索引。如果不是,它是一个函数指针。

尽管我真的很想,但我无法更改这段代码。

不幸的是,测试甚至不起作用:在 OSX 上(它还没有对其他地方的任何人造成问题),程序中的函数指针的地址可能比阈值低得多,这意味着有问题的函数可以检测到它们作为索引而不是指针,一切都会出错。

有没有我可以给链接器的指令——在这种情况下是 lld——强制它把所有生成的代码放在上面或上面0x10000,这样这个问题就会消失,直到有人可以修复这个荒谬的测试?

我尝试了该-sectalign选项,但这给出了以下错误:

ld:-sectalign 的参数必须小于或等于 0x8000

0x8000还不够;代码仍然放置在它之间的空间中,0x10000并且逻辑仍然失败。

我可以使用其他选项来执行此操作吗?

0 投票
3 回答
221 浏览

porting - 如何将 BlitzBasic 3D 移植到 BlitzMax IDE

有人可以帮我将用 BlitzBasic 编写的游戏移植到 BlitzMax IDE。我尝试将 .bb 文件运行到 MaxIDE 中,但它显示“file.bb 进程失败”。另外我在哪里可以找到有关此的更多信息?