Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-19838
Malder
2003-02-27 23:31
2003.04.07
Большой куш (snatch)


3-19479
dmi-vancev
2003-03-16 01:19
2003.04.07
IBase


8-19710
Mihey
2003-01-04 00:01
2003.04.07
Глючит TDXTimer!


3-19496
Rustik
2003-03-19 16:29
2003.04.07
Инкрементальный поиск в DBLookUpComboBox


1-19530
Вадим
2003-03-26 16:15
2003.04.07
TRcihEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский