Delphi の ActiveX コンポーネントを使用して処理されるハードウェアがあります。設計時にそのコンポーネントをフォームにドロップすると、すべて正常に機能します。ただし、実行時に Creat(Self) を使用して動的に作成すると、さらにメソッドを実行すると、mfc100.dll でアクセス違反が発生します。コードは非常に単純です。
uses
Windows, Messages, ...
OleCtrls, MG17MotorLib_TLB; // <-- The latter is the hardware driver
type
TForm1 = class(TForm)
motorX: TMG17Motor;
...
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
motorX := TMG17Motor.Create(Self);
motorX.HWSerialNum := 94835472;
motorX.StartCtrl; // <--- This causes AV in mfc100.dll
end;
TMG17Motor クラスは TOleControl の子孫であり、ハードウェア プロデューサーによって提供されます。
ActiveX オブジェクトの動的な作成を間違えたのでしょうか、それとも TMG17Motor クラスのバグのように見えますか? 設計時にコントロールをフォームにドロップして Create(Self) を使用しないようにすれば、TMG17Motor クラスのオブジェクトをアプリケーションと同じようにチートして作成する方法があるのではないでしょうか?
PS コントロールを動的に作成できるようにしたい理由は、ハードウェア処理のコードをワーカー スレッドに移動したいからです。