DLL-Import: Procedure Configure
Verfasst: Montag 13. Oktober 2008, 11:03
Mike D
Anmeldungsdatum: 03.07.2006
Beiträge: 236
Verfasst am: 03.07.2006 13:03 Titel: DLL-Import: Procedure Configure
--------------------------------------------------------------------------------
Hallo,
ich möchte in einer mit Delphi geschriebenen DLL die Procedure Configure nutzen. Mit der MessageBox aus dem C++ Beispiel geht das auch, macht aber nicht viel Sinn. Wenn ich versuche ein eigenes Fenster mit der Procedure darzustellen kommt eine Zugriffsverletzungs-Meldung wenn man im Eigenschaften-Dialog von DLL-Import auf Einstellungen klickt.
Hat schon jemand mit irgend einer Programmiersprache erfolgreich Configure genutzt?
Mike
Nach oben
abacom
Site Admin
Anmeldungsdatum: 30.06.2006
Beiträge: 898
Verfasst am: 04.07.2006 18:33 Titel: DLL CONFIG
--------------------------------------------------------------------------------
Hier die versprochene Ergänzung zum Delphi-DLL-Beispiel, das die Verwendung von CONFIGURE demonstriert:
Der Dialog "Dlg_CounterConfig" kann wie gewohnt mit dem Delphi-Formular-Editor erzeugt werden, und enthält ein Edit-Feld "ValueEdit" zum Einstellen des Counter-Startwertes "PUser^[InitialCount]"
und zwei Buttons "OK" und "Abbrechen".
Der komplette Quelltext wird im nächsten Internetupdate enthalten sein.
Hier nur die Änderungen gegenüber dem bisherigen Beispiel.
Code:
uses
(...,)
Dlg_CounterConfig in 'Dlg_CounterConfig.pas' {CounterConfigDlg};
(...)
const
(...)
InitialCount = 3; // index user variable INITIALCOUNT
DLLIndex = 100; // DLL No. set by ProfiLab
(...)
Procedure Configure(PUser: PDLLParams);
var DLG: TCounterConfigDlg;
begin
//Create user dialogue
DLG:=TCounterConfigDlg.Create(nil);
With DLG do
begin
// Show ProfiLab DLL-Index in dialogue caption
Caption:='Counter [DLL'+FloatToStr(PUser^[DLLIndex])+']';
// Set dialogue values
ValueEdit.Text:=FloatToStr(PUser^[InitialCount]);
// Execute dialogue
if ShowModal=mrOK then
begin
// Read values from dialogue
PUser^[InitialCount]:=StrToInt(ValueEdit.Text);
end;
// Free dialogue
free;
end;
end;
(...)
exports
(...)
Configure;
ABACOM support
Nach oben
abacom
Site Admin
Anmeldungsdatum: 30.06.2006
Beiträge: 898
Verfasst am: 20.08.2006 21:19 Titel:
--------------------------------------------------------------------------------
ExpertProfi bietet eine DLL mit Delphi-Source auf seiner Homepage an, die ebenfalls mit CONFIGURE arbeitet:
http://www.expertprofi.ag.vu/elektor_usb_uart.html
ABACOM support
Nach oben
abacom
Site Admin
Anmeldungsdatum: 30.06.2006
Beiträge: 898
Verfasst am: 23.04.2007 13:42 Titel:
--------------------------------------------------------------------------------
In C++ sieht es ähnlich aus:
Code:
#include "ConfigDialog.h"
USEFORM("ConfigDialog.cpp", CounterConfigDlg);
(...)
void _stdcall CConfigure(double *PUser)
{
CounterConfigDlg = new TCounterConfigDlg(Application);
CounterConfigDlg->Caption = "Counter [DLL"+FloatToStr(PUser[DLLIndex])+"]";
CounterConfigDlg->ValueEdit->Text = FloatToStr(PUser[InitialCount]);
if ( CounterConfigDlg->ShowModal() == IDOK )
{
PUser[InitialCount] = StrToInt(CounterConfigDlg->ValueEdit->Text);
};
delete CounterConfigDlg;
}
Anmeldungsdatum: 03.07.2006
Beiträge: 236
Verfasst am: 03.07.2006 13:03 Titel: DLL-Import: Procedure Configure
--------------------------------------------------------------------------------
Hallo,
ich möchte in einer mit Delphi geschriebenen DLL die Procedure Configure nutzen. Mit der MessageBox aus dem C++ Beispiel geht das auch, macht aber nicht viel Sinn. Wenn ich versuche ein eigenes Fenster mit der Procedure darzustellen kommt eine Zugriffsverletzungs-Meldung wenn man im Eigenschaften-Dialog von DLL-Import auf Einstellungen klickt.
Hat schon jemand mit irgend einer Programmiersprache erfolgreich Configure genutzt?
Mike
Nach oben
abacom
Site Admin
Anmeldungsdatum: 30.06.2006
Beiträge: 898
Verfasst am: 04.07.2006 18:33 Titel: DLL CONFIG
--------------------------------------------------------------------------------
Hier die versprochene Ergänzung zum Delphi-DLL-Beispiel, das die Verwendung von CONFIGURE demonstriert:
Der Dialog "Dlg_CounterConfig" kann wie gewohnt mit dem Delphi-Formular-Editor erzeugt werden, und enthält ein Edit-Feld "ValueEdit" zum Einstellen des Counter-Startwertes "PUser^[InitialCount]"
und zwei Buttons "OK" und "Abbrechen".
Der komplette Quelltext wird im nächsten Internetupdate enthalten sein.
Hier nur die Änderungen gegenüber dem bisherigen Beispiel.
Code:
uses
(...,)
Dlg_CounterConfig in 'Dlg_CounterConfig.pas' {CounterConfigDlg};
(...)
const
(...)
InitialCount = 3; // index user variable INITIALCOUNT
DLLIndex = 100; // DLL No. set by ProfiLab
(...)
Procedure Configure(PUser: PDLLParams);
var DLG: TCounterConfigDlg;
begin
//Create user dialogue
DLG:=TCounterConfigDlg.Create(nil);
With DLG do
begin
// Show ProfiLab DLL-Index in dialogue caption
Caption:='Counter [DLL'+FloatToStr(PUser^[DLLIndex])+']';
// Set dialogue values
ValueEdit.Text:=FloatToStr(PUser^[InitialCount]);
// Execute dialogue
if ShowModal=mrOK then
begin
// Read values from dialogue
PUser^[InitialCount]:=StrToInt(ValueEdit.Text);
end;
// Free dialogue
free;
end;
end;
(...)
exports
(...)
Configure;
ABACOM support
Nach oben
abacom
Site Admin
Anmeldungsdatum: 30.06.2006
Beiträge: 898
Verfasst am: 20.08.2006 21:19 Titel:
--------------------------------------------------------------------------------
ExpertProfi bietet eine DLL mit Delphi-Source auf seiner Homepage an, die ebenfalls mit CONFIGURE arbeitet:
http://www.expertprofi.ag.vu/elektor_usb_uart.html
ABACOM support
Nach oben
abacom
Site Admin
Anmeldungsdatum: 30.06.2006
Beiträge: 898
Verfasst am: 23.04.2007 13:42 Titel:
--------------------------------------------------------------------------------
In C++ sieht es ähnlich aus:
Code:
#include "ConfigDialog.h"
USEFORM("ConfigDialog.cpp", CounterConfigDlg);
(...)
void _stdcall CConfigure(double *PUser)
{
CounterConfigDlg = new TCounterConfigDlg(Application);
CounterConfigDlg->Caption = "Counter [DLL"+FloatToStr(PUser[DLLIndex])+"]";
CounterConfigDlg->ValueEdit->Text = FloatToStr(PUser[InitialCount]);
if ( CounterConfigDlg->ShowModal() == IDOK )
{
PUser[InitialCount] = StrToInt(CounterConfigDlg->ValueEdit->Text);
};
delete CounterConfigDlg;
}