播放.xm .mod Audio Files在没有DLL的Delphi中



我想在不使用dlls的情况下播放.xm或.mod文件。我在这里搜索和类似的网站。最后,我找到了一个不错的库(BeRoXM.pas),可以做我想做的事情。(您可以在这里下载)

但是当我使用Delphi Xe5时,我无法编译该设备。代码太旧了。

那么如何播放这些文件?

谢谢。

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

这是错误E2033,由文档描述如下:

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

因此,错误是带有var参数,而BeginThread仅具有一个:最终参数。库代码正在通过该var参数和ThreadIDThreadID,该参数称为:

ThreadID: THandle;

但是BeginThread功能期望该参数的TThreadID(是LongWord的别名)。库代码完全是虚假的。线程ID绝对不是THandle

在旧版本的Delphi THandle中被错误地称为LongWord。值得庆幸的是,最新版本的Delphi修复程序将其宣布为NativeUInt,尽管我个人希望将其称为Windows Header Files中的未型指针。

通过将ThreadID的类型更改为TThreadID来修复BeRoXM库代码。希望将此代码移植到XE5时会有更多问题。

我是Beroxm的作者。Beroxm几个月以来与新的Delphi和FPC版本兼容。

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

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

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

不使用dlls

不使用或不部署?您可以将DLL在应用程序内部包装到临时文件夹中,然后从中加载。

和调试器说:

调试器仅在程序已经运行时起作用。既然您无法编译,那就是编译器的说法。

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

所以你能告诉我如何解决此错误?

  1. 您应该了解何时使用该功能。可能有几个函数名为" beginthread"。您必须确定编译器真正想使用的那个。通常Ctrl 单击足以找到它,尽管有时IDE会发疯。

  2. 您应该在此处复制该功能的声明。

  3. 您应该找到并复制尝试输入该功能的所有参数的声明。他们是BeRoXMThreadProc, self, ThreadID

  4. 您必须比较在" beginthread"中声明的参数的数据类型。声明(这些称为形式),并在您尝试调用该功能的地方使用(称为实际的功能)。并使它们互相匹配。

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

  • http://docwiki.embarcadero.com/libraries/xe5/en/system.beginthread
  • http://www.freepascal.org/docs-html/rtl/system/tthreadfunc.html

,但也许不是 - 如上所述,可能有几个函数被称为" beginthread"。

ps:尽管我将这些链接放置在上面,但您最好将来自来源的实际功能和类型声明复制到问题中。Stackoverflow试图成为自我依赖的站点,其中所有必需的数据已经存在,而无需外部链接,它可能会离线或404。

最新更新