Форум: "Основная";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
ВнизПомогите подключить Dll-ку! Найти похожие ветки
← →
DelphiN! (2003-03-25 15:56) [0]При компиляции основного файла компилятор выдает ошибку:
Unable to create process: Присоединенное к системе устройство не работает
Вот код Dll-ки:
library dll;
uses
SysUtils,
Classes,messages,windows;
{$R *.res}
function myproc: pchar; stdcall; export;
begin
result := "hello from DLL!!!";
end;
begin
end.
Вот код основной проги:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function myproc: pchar; stdcall; external "dll.dll";
procedure TForm1.Button1Click(Sender: TObject);
begin
messagebox(0,myproc,myproc,0);
end;
end.
Где моя ошибка?
Заранее благодарен!
← →
Jel (2003-03-25 16:08) [1]
> library dll;
> uses
> SysUtils,
> Classes,messages,windows;
> {$R *.res}
> function myproc: pchar; stdcall; export;
> begin
> result := "hello from DLL!!!";
> end;
> exports
> myproc;
> begin
> end.
Из хелпа
The directives near, far, and export refer to calling conventions in 16-bit Windows programming. They have no effect in 32-bit applications and are maintained for backward compatibility only.
← →
DelphiN! (2003-03-25 17:13) [2]А если я хочу в процедуре myproc(пусть она находится в dll и выглядит скажем так: procedure myproc(var a:tmessage); присвоить событие WM_HOTKEY, как мне это сделать. Когда при подключении dll я пытаюсь это сделать таким образом: procedure geta(var a:tmessage); stdcall;external "dll.dll"; message wm_hotkey;
компилятор выдает ошибку. Как мне это можно сделать(либо в самой dll либо при ее подключении) разницы нет, лижбы как нибудь.
Заранее благодарен!
← →
Jel (2003-03-25 17:50) [3]Проще всего описать эту процедуру как private метод формы и уже в реализации вызвать обработчик из dll
← →
DelphiN! (2003-03-25 17:56) [4]А примерчик нельзя ли, ото не совсем догоняю
← →
DelphiN! (2003-03-25 18:47) [5]var
a:word;
b:tmessage;
begin
case a of
wm_hotkey:myproc(b);
end;
почемуто не работает, просто не выполняется код процедуры, когда происходит событие wm_hotkey!?!?
← →
DelphiN! (2003-03-25 19:18) [6]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure geta(var a:tmessage):boolean; stdcall; external "dll.dll"; message wm_hotkey; //Вот здесь компилятор выдает ошибку: "Unknown directive: "Message"", я хочу подключить к процедуре, находящейся в Dll-ке событие, WM_HOTKEY, в чем моя ошибка?
end.
ЧТо то типо того в dll:
library dll;
uses
SysUtils,
Classes,
messages,
windows,
clipbrd;
var
oldhwnd:integer;
...;
{$R *.res}
function geta(var a:tmessage):boolean; stdcall export;
var
...
begin
....
end;
exports
geta;
begin
end.
Уже пол дня убил на это, мозги от излучения засохли, ANY BODY HELP ME PLIZZZZZZZZZZZ!!!
← →
oomneeq (2003-03-25 20:59) [7]Директива message может быть приписана только к МЕТОДУ объекта
F1, message, directive
на событие может реагировать объект
Ошибка в мировоззрении. :-)
> хочу подключить к процедуре, находящейся в Dll-ке событие
"подключить событие к процедуре" - это как ?!
← →
DelphiN! (2003-03-26 18:30) [8]Хорошо, вот код дллки:
library dll;
uses
SysUtils, Classes,messages,windows;
procedure myproc(var a:tmessage); message wm_hotkey; stdcall; export;
//вот здесь вылетает ошибка
begin
mesagebox(0,"a","a",0);
end;
exports
myproc;
begin
end.
Как мне для события wm_hotkey обработчиком поставить процедуру
myproc, которая находится в дллке? Если нетрудно примерчик можно. Заранее благодарен.
← →
oomneeq (2003-03-26 19:12) [9]Если глобально для всего приложения, то можно сделать так.
procedure TFormMain1.AppOnMessage(var Msg: TMsg; var Handled: Boolean);
begin
//ecтессно к этому моменту myproc должна уже быть найдена и загружена
if Msg.message=wm_hotkey then myproc(Msg);
end;
procedure TFormMain1.FormCreate(Sender: TObject);
begin
// RegisterHotKey(Handle,2, 0,VK_NUMPAD8);
Application.OnMEssage:=AppOnMessage;
end;
ЗЫ про RegisterHotKey() не забыл ты, я надеюсь
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/KeyboardInput/KeyboardInputReference/KeyboardInputFunctions/RegisterHotKey.asp
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c