我有一块硬件使用 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我希望能够动态创建控件的原因是我想将用于硬件处理的代码移动到工作线程。