gpt4 book ai didi

delphi - 如何测试存在的MIDI驱动程序

转载 作者:行者123 更新时间:2023-12-03 18:42:53 27 4
gpt4 key购买 nike

我在Windows XP模式虚拟PC上测试了我的MIDI应用程序,它立即崩溃了。在几台VirtualBox XP机器上进行测试是可以的。当我远程调试该应用程序时,它似乎在到达任何(可见)代码行之前都会在启动代码中崩溃。错误消息是没有MIDI驱动程序存在。这很奇怪,因为仅在应用程序的后期,才需要并测试任何MIDI系统的存在。

尽管作为音频的集成功能之一,控制面板上没有显示MIDI系统。

问题:在没有机会测试我的应用程序存在之前,如何防止我的应用程序因没有MIDI驱动程序而崩溃?

预先感谢您的任何建议。

使用Delphi XE

更新好了,我被结合Windows XP模式的远程调试器愚弄了。通常不起作用。有一次我得到了一些奏效,它给了我正确的答案(不存在MIDI驱动程序)。 Rob和Warren是正确的,在提出问题之前,我应该更深入地研究调试器,对此感到抱歉。但是,问题基本上保持不变,我希望可以稍作修改。

稍作修改的问题如何在Delphi中测试Windows XP模式下是否没有MIDI驱动程序?

如果在我的Windows XP模式虚拟PC中不存在MIDI驱动程序,Delphi仍然会看到存在一个MIDI输出设备。一旦我尝试打开此设备,就会引发异常“系统上没有安装驱动程序”。是的,但是为什么在这种情况下midiOutGetNumDevs返回1而不是0?我使用Dave Churchers midi components编写了一个小程序来重现该错误。此代码在VirtualBox上可以正常工作。

unit MIDITest_Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MMSystem, MIDIOut;

type
TForm1 = class(TForm)
Button1: TButton;
List: TListBox;
Button2: TButton;

procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click (Sender: TObject);
begin
List.Items.Add (Format ('%d MIDI output devices', [midiOutGetNumDevs]));
end; // Button1Click //

procedure TForm1.Button2Click (Sender: TObject);
var Device: TMidiOutput;
ePort: Int32;
begin
for ePort := 0 to midiOutGetNumDevs - 1 do
begin
Device := TMidiOutput.Create (Self);
Device.DeviceID := ePort;
List.Items.Add (Format ('Trying to open device %d', [Device.DeviceID]));
Application.ProcessMessages;
// ShowMessage ('Open');
if Device.Open then
begin
List.Items.Add (Format ('Opened device %s', [Device.ProductName]));
Application.ProcessMessages;
end else
begin
List.Items.Add (Format ('Cannot open device %d', [Device.DeviceID]));
Application.ProcessMessages;
end; // if
end; // if
end; // Button2Click //

end.

最佳答案

这与Delphi或MIDI组件无关。
midiOutGetNumDevs是通过MMSystem.pas对winmm.dll的外部调用-如果在虚拟化时返回的值不正确,则您需要查看或询问Microsoft原因。

顺便说一句,那些MIDI组件现在已经很老了,您看到了吗?
http://www.delphipraxis.net/151718-midi-i-o-komponenten-v7.html
它基于Dave Churcher的相同内容,但是最近。例如,它包含D2010软件包而不是Delphi 3(!)。

您永远不会知道,当没有设备存在时,它们可能已解决了崩溃问题。

关于delphi - 如何测试存在的MIDI驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9472040/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com