Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 869

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
У меня возникла какая-то непонятная проблема с dll. на одном компьютере (WinXP) и на ноутбуке (Vista) все работает. Запускаю приложение на рабочих компьютерах (WinXP) - не работает, возникает ошибка "The application failed initialize properly (0xc0150002). Click Ok to terminate the application.". Даже не входит в FormCreate. не использую функции библиотеки - работает. код тестового приложения ниже.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls;
  8.  
  9. //------my---------------------------
  10. type
  11. CallBackFuncType = function (mesg: PChar; repeated: boolean): Integer; stdcall;
  12.  
  13. type
  14. TRemoteControlThread = class(TThread)
  15. private
  16. protected
  17. procedure Execute; override;
  18. public
  19. procedure Free;
  20. end;
  21. //------my---------------------------
  22.  
  23. type
  24. TForm1 = class(TForm)
  25. Button1: TButton;
  26. Memo1: TMemo;
  27. Button2: TButton;
  28. procedure Button1Click(Sender: TObject);
  29. procedure Button2Click(Sender: TObject);
  30. private
  31. { Private declarations }
  32. IRreceiveThread: TRemoteControlThread;
  33.  
  34. public
  35. { Public declarations }
  36. end;
  37.  
  38.  
  39. var
  40. Form1: TForm1;
  41.  
  42. implementation
  43.  
  44. {$R *.dfm}
  45. procedure SetCallBack(cbfunc: CallBackFuncType); stdcall; external 'RemoteControl.DLL' name 'SetCallBack';
  46. procedure startReceive(); stdcall; external 'RemoteControl.DLL' name 'startReceive';
  47.  
  48. function ReceiveCallBack(mesg: PChar; repeated: boolean): Integer; stdcall;
  49. begin
  50. if (not repeated) then
  51. begin
  52. if (mesg = 'POWER_BUTTON') then
  53. begin
  54. Form1.Memo1.Lines.Add('-> POWER');
  55. end;
  56. if (mesg = 'UP_BUTTON') then
  57. begin
  58. Form1.Memo1.Lines.Add('-> UP');
  59. end;
  60. if (mesg = 'DOWN_BUTTON') then
  61. begin
  62. Form1.Memo1.Lines.Add('-> DOWN');
  63. end;
  64. if (mesg = 'LEFT_BUTTON') then
  65. begin
  66. Form1.Memo1.Lines.Add('-> LEFT');
  67. end;
  68. if (mesg = 'RIGHT_BUTTON') then
  69. begin
  70. Form1.Memo1.Lines.Add('-> RIGHT');
  71. end;
  72. end
  73. else
  74. Form1.Memo1.Lines.Add(' REPEAT');
  75. end;
  76.  
  77. //--------TOPCmonitorThread---functions---------------------------------------
  78.  
  79. procedure TRemoteControlThread.Free;
  80. begin
  81.  
  82. end;
  83.  
  84. procedure TRemoteControlThread.Execute;
  85. var
  86. i: integer;
  87. str: string;
  88. count: integer;
  89. begin
  90. try
  91. SetCallBack(ReceiveCallBack);
  92. startReceive;
  93. except
  94. end;
  95. end;
  96.  
  97.  
  98.  
  99.  
  100. begin
  101. IRreceiveThread := TRemoteControlThread.Create(True);
  102. IRreceiveThread.FreeOnTerminate:=True;
  103. IRreceiveThread.Priority := tpLowest;
  104. IRreceiveThread.Resume;
  105. end;
  106.  
  107.  
  108. begin
  109. IRreceiveThread.Free;
  110. IRreceiveThread.Terminate;
  111. end;
  112.  
  113. end.


AlexMPEI Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: AlexMPEI (статус: 1-ый класс)
Вопрос отправлен: 11 марта 2010, 15:11
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 11 марта 2010, 17:14; участников в обсуждении: 1.
Вадим К

Вадим К (статус: Академик), 11 марта 2010, 17:14 [#1]:

подобная ошибка может быть, если на заданных машинах уже есть длл с таким именем и она используется другим приложением.

Но для начала рекомендую исправить грубые ошибки в коде.

вот имеем
IRreceiveThread.Free;
IRreceiveThread.Terminate;

Это как? вначале мы объект удаляем, а потом у него дергаем методы????

но раз мы написали
IRreceiveThread.FreeOnTerminate:=True;
то free вызывать уже не нужно, само вызовется.

Ну и синхронизацию треда никто не отменял.


Вывод: говорить о работоспособности этого кода как то не удобно.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:46
Выполнено за 0.02 сек.