Форум: "Начинающим";
Текущий архив: 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