Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];

Вниз

Процедура прерывания. В 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.005 c
15-1261595337
ford
2009-12-23 22:08
2010.03.07
Помогите с алгоритмом


6-1211355931
lead-in
2008-05-21 11:45
2010.03.07
посылка сообщения в локальной сети


2-1262794714
antonn
2010-01-06 19:18
2010.03.07
запуск консольной утилиты с передачей ей параметра в OEM


15-1261416148
@!!ex
2009-12-21 20:22
2010.03.07
Продажа доступа к данным. Как лучше?


4-1229864623
Максим
2008-12-21 16:03
2010.03.07
взаимодействие с проводником windows





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский