У меня есть часть оборудования, которое обрабатывается с использованием компонента ActiveX в Delphi. Если я отброшу этот компонент в моей форме во время разработки, все будет хорошо. Однако, если я создаю его динамически во время выполнения с помощью Creat (Self), дальнейшее выполнение метода вызывает нарушение доступа в файле mfc100.dll. Код очень прост:Создание компонента ActiveX во время выполнения приводит к нарушению доступа
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? Возможно, есть способ обмануть и создать объект класса TMG17Motor так же, как это делает приложение, если я избегу использовать Create (Self), отбросив элемент управления в форме во время разработки?
P.S. Причина, по которой я хочу иметь возможность динамически создавать элемент управления, - это то, что я хочу переместить код для аппаратной обработки в рабочий поток.
Возможно/вероятно, что элемент управления имеет определенную зависимость (например, он ожидает наличия родительского свойства или чего-то подобного). Если у вас есть источник или символы для целевого элемента управления, должно быть просто посмотреть в отладчике, чтобы узнать, что именно запускает AV. – EricLaw
Я бы поговорил с продавцом. http://www.thorlabs.com/newgrouppage9.cfm?objectgroup_id=2419 Также попробуйте сбросить DFM и установить ВСЕ свойства точно так, что вы видите в DFM. –
@ EricLaw: Спасибо за идею! Я не думал о зависимостях. Попробует посмотреть в этом направлении. – Ilya