Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.07;
Скачать: CL | DM;

Вниз

Процедура прерывания. В Delphi 7 pointer ?   Найти похожие ветки 

 
Who_is_you? ©   (2009-12-25 15:28) [0]

Подскажите, пожалуйста.
Есть процедура. Описывается она у автора так:

С++: void xDRV_InitInterput(void(*FunAdr)(void* p), void* param);  
Delphi: procedure xDRV_InitInterput(F: IntrFun; D: pointer);  

Когда я вставляю её у себя, то Delphi 7 ругается
Unsafe type "Pointer" на след. строки:
 IntrFun = procedure(var param: pointer);
 procedure xDRV_InitInterput(F: IntrFun; D: pointer); cdecl; external "xDRV.dll";
procedure MyInterrupt(param: pointer);

А вот начало самой проги:


unit LPT_UnitxDRV;

interface

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

type
 IntrFun = procedure(var param: pointer);

 function  xDRV_OpenDriver():Boolean; cdecl; external "xDRV.dll";
 procedure xDRV_StopDriver(); cdecl; external "xDRV.dll";
 procedure xDRV_Write(PortAdr: LongInt; PortValue: Byte); cdecl; external "xDRV.dll";
 function  xDRV_Read(PortAdr: LongInt): Byte; cdecl; external "xDRV.dll";
 procedure xDRV_InitInterput(F: IntrFun; D: pointer); cdecl; external "xDRV.dll";

type
 TForm1 = class(TForm)
   StopDriver: TButton;
   Button1: TButton;
   Button2: TButton;
   Label1: TLabel;
   procedure StopDriverClick(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 Busy,Strobe0,Strobe1,ACK :Byte;
 Bidirection,HostBusy0,HostBusy1,PrtClk,HostClk0,HostClk1  :Byte;

implementation

{$R *.dfm}

procedure MyInterrupt(param: pointer);
begin  
  ShowMessage("Произошло прерывание");
end;


 
Сергей М. ©   (2009-12-25 15:41) [1]


> вот начало самой проги


И где там те самые строки, на которые "ругается" ?


 
Palladin ©   (2009-12-25 15:45) [2]


> Unsafe type "Pointer" на след. строки:  IntrFun = procedure(var
> param: pointer);  procedure xDRV_InitInterput(F: IntrFun;
>  D: pointer); cdecl; external "xDRV.dll";procedure MyInterrupt(param:
>  pointer);

на все три сразу чтоли?


 
Who_is_you? ©   (2009-12-25 17:45) [3]

> Unsafe type "Pointer" на след. строки:  IntrFun = procedure(var
> param: pointer);  procedure xDRV_InitInterput(F: IntrFun;
>  D: pointer); cdecl; external "xDRV.dll";procedure MyInterrupt(param:
>  pointer);

на все три сразу чтоли?

Да, на все три.


 
Anatoly Podgoretsky ©   (2009-12-25 17:53) [4]

Так все три опасные и есть, нетипизированый указатель.


 
Who_is_you? ©   (2009-12-25 20:29) [5]

Так все три опасные и есть, нетипизированый указатель.

Так подскажите, пожалуйста, как правильно сделать?


 
Anatoly Podgoretsky ©   (2009-12-25 20:31) [6]

> Who_is_you?  (25.12.2009 20:29:05)  [5]

Сделать типизированый указатель.


 
Who_is_you? ©   (2009-12-25 20:34) [7]

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


> unit LPT_UnitxDRV;
>
> interface
>
> uses
>  Windows, Messages, SysUtils, Variants, Classes, Graphics,
>  Controls, Forms,
>  Dialogs, StdCtrls;
>
> type
>  IntrFun = procedure(var param: pointer);
>
>  function  xDRV_OpenDriver():Boolean; cdecl; external "xDRV.
> dll";
>  procedure xDRV_StopDriver(); cdecl; external "xDRV.dll";
>
>  procedure xDRV_Write(PortAdr: LongInt; PortValue: Byte);
>  cdecl; external "xDRV.dll";
>  function  xDRV_Read(PortAdr: LongInt): Byte; cdecl; external
> "xDRV.dll";
>  procedure xDRV_InitInterput(F: IntrFun; D: pointer); cdecl;
>  external "xDRV.dll";

>
> type
>  TForm1 = class(TForm)
>    StopDriver: TButton;
>    Button1: TButton;
>    Button2: TButton;
>    Label1: TLabel;
>    procedure StopDriverClick(Sender: TObject);
>    procedure Button1Click(Sender: TObject);
>    procedure Button2Click(Sender: TObject);
>    procedure FormCreate(Sender: TObject);
>  private
>    { Private declarations }
>  public
>    { Public declarations }
>  end;
>
> var
>  Form1: TForm1;
>  Busy,Strobe0,Strobe1,ACK :Byte;
>  Bidirection,HostBusy0,HostBusy1,PrtClk,HostClk0,HostClk1
>  :Byte;
>
> implementation
>
> {$R *.dfm}
>
> procedure MyInterrupt(param: pointer);
> begin  
>   ShowMessage("Произошло прерывание");
> end;
> <Цитата>


 
Сергей М. ©   (2009-12-25 21:30) [8]


> Who_is_you? ©   (25.12.09 20:34) [7]


[Warning] в переводе с буржуйского - это не [Ругаюсь].
Да и цветочки это.
Грабли еще ждут тебя впереди.
С какой стати тип IntrFun у тебя задан с дифолтным [pascal fastcall] соглашением ?


 
Германн ©   (2009-12-26 02:25) [9]


> [Warning] в переводе с буржуйского - это не [Ругаюсь].

Уточню. "Warning" - предупреждение, что сейчас это нормально сработает. Но нет никакой гарантии, что эта сентеция нормально сработает в будущем.
Хотя практика показывает, что эти ворнинги - фигня.
Но... Решать автору.


 
Who_is_you? ©   (2009-12-26 23:20) [10]

Так кто-нибудь подскажет?

Как правильно написать выделенные жирным строчки:

type
IntrFun = procedure(var param: pointer);

procedure xDRV_InitInterput(F: IntrFun; D: pointer); cdecl; external "xDRV.dll";


implementation

{$R *.dfm}

procedure MyInterrupt(param: pointer);
begin  
 ShowMessage("Произошло прерывание");
end;

чтобы  Delphi 7 не ругался Unsafe type "Pointer"


 
Юрий Зотов ©   (2009-12-26 23:24) [11]

> Who_is_you? ©   (26.12.09 23:20) [10]

Просто не обращайте внимания. Или отключите это предупреждение в опциях проекта. В данном конкретном случае оно не опасно.


 
Who_is_you? ©   (2009-12-28 09:51) [12]


> Юрий Зотов ©   (26.12.09 23:24) [11]
> > Who_is_you? ©   (26.12.09 23:20) [10]
>
> Просто не обращайте внимания. Или отключите это предупреждение
> в опциях проекта. В данном конкретном случае оно не опасно.
>


Понял. Спасибо за ответ.



Страницы: 1 вся ветка

Текущий архив: 2010.03.07;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
2-1262071082
Who_is_you?
2009-12-29 10:18
2010.03.07
Чтение и запись в LPT в режиме Bidirection Win XP, Win98?


11-1212953619
Elec3C
2008-06-08 23:33
2010.03.07
TKOLmdvXLGrid


15-1260997140
Кто б сомневался
2009-12-16 23:59
2010.03.07
Web при помощи Delphi


10-1163588110
312kbps
2006-11-15 13:55
2010.03.07
Получить конект через IDispatch !


2-1262161972
pleasure
2009-12-30 11:32
2010.03.07
формы, права, доступ