在没有DLL的Delphi中播放.XM .MOD音频文件

时间:2014-01-18 19:21:06

标签: delphi delphi-xe5

我想在不使用DLL的情况下在Delphi中播放.XM或.MOD文件。我搜索了这里和类似的网站。最后,我找到了一个很好的库(BeRoXM.pas)来做这件事,它可以做我想做的事情。 (您可以下载here

但是当我使用Delphi XE5时,我无法编译该单元。代码太旧了。

那我该如何播放这些文件?

谢谢。

4 个答案:

答案 0 :(得分:2)

  

实际和正式var参数的类型必须相同

这是错误E2033,described by the documentation如下:

  

对于变量参数,实际参数必须是形式参数的确切类型。

所以错误是var参数,BeginThread只有一个:最后一个参数。库代码正在传递ThreadID var参数和ThreadID,其声明为:

ThreadID: THandle;

但是BeginThread函数需要TThreadID(这是LongWord的别名)。图书馆代码完全是虚假的。线程ID绝对不是THandle

旧版本的Delphi THandle被错误地声明为LongWord。值得庆幸的是,最新版本的Delphi通过将其声明为NativeUInt来修复这种讽刺,尽管我个人更喜欢将其声明为无类型指针,因为它在Windows头文件中。

通过将BeRoXM的类型更改为ThreadID来修复TThreadID库代码。将此代码移植到XE5时,预计会出现更多问题。

答案 1 :(得分:2)

我是BeRoXM的作者。 BeRoXM几个月后就与更新的Delphi和FPC版本兼容。

但我可以问一下,你为什么不直接通过电子邮件与我联系?我的电子邮件地址可以在代码注释中的BeRoXM.pas文件的开头找到。

答案 2 :(得分:1)

uFMOD使您可以轻松地在应用程序中播放.xm配乐[chiptunes]。通过指定参数,您可以从磁盘,内存或资源中播放.xm文件。

http://www.delphibasics.info/home/delphibasicssnippets/ufmodexample-playxmfilesfromdiskmemoryorresource

答案 3 :(得分:0)

  

不使用DLL

不使用或不部署?您可以在应用程序中包含DLL,将其解压缩到临时文件夹并从中加载。

  

调试器说:

调试器仅在程序运行时才有效。既然你无法编译,那就是编译器说的。

  

实际和正式var参数的类型必须相同

     

那么请你告诉我如何解决这个错误?

  1. 您应该了解何时使用该功能。可能有几个名为“BeginThread”的函数。你必须指出编译器真正想要使用的那个。通常,Ctrl + Click足以找到它,但有时IDE会疯狂。

  2. 您应该为我们复制该功能的声明。

  3. 您应该找到并复制您尝试输入函数的所有参数的声明。这里是BeRoXMThreadProc, self, ThreadID

  4. 您必须比较为“BeginThread”声明中的参数声明的数据类型(称为正式声明)并在您尝试调用该函数的位置使用(这些称为实际的)。并使它们相互匹配。

  5. 这可能是您尝试调用的函数的声明

    但也许不是 - 如上所述,可能有几个名为“BeginThread”的函数。

    PS:虽然我把这些链接放在上面,但您最好将来自您的来源的实际功能和类型声明复制到您的问题中。 StackOverflow尝试成为一个自我依赖的站点,其中所有必需的数据已经存在问题,没有外部链接,可能会脱机或404将来。