Ik dacht al dat ik gek werd 
maargoed,hier men vraag nog een keertje
Ik heb dus een paar probleempjes met dll's
waar ik echt ff niet meer uit kom
In de app. staat bijv dit:
en dan
En dit is de dll:
maar ik krijg steeds weer de melding:
'project1.exe raised exception class EInvalid pointer with message 'invalid pointer operation' blabla
ik doe dus duidelijk iets fout
maar wat
maargoed,hier men vraag nog een keertje
Ik heb dus een paar probleempjes met dll's
waar ik echt ff niet meer uit kom
In de app. staat bijv dit:
code:
1
| function uptime:string; external 'GetUptime.dll' |
en dan
code:
1
2
3
4
| procedure TForm1.Timer1Timer(Sender: TObject); begin uptLabel.caption := uptime; end; |
En dit is de dll:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| library GetUptime;
uses
Windows,
SysUtils,
Classes, sharemem;
{$R *.res}
function UpTime: string; export;
const
ticksperday : integer = 1000 * 60 * 60 * 24;
ticksperhour : integer = 1000 * 60 * 60;
ticksperminute : integer = 1000 * 60;
tickspersecond : integer = 1000;
var
t : longword;
d, h, m, s : integer;
begin
t := GetTickCount;
d := t div ticksperday;
dec(t, d * ticksperday);
h := t div ticksperhour;
dec(t, h * ticksperhour);
m := t div ticksperminute;
dec(t, m * ticksperminute);
s := t div tickspersecond;
Result := 'Uptime: '+IntToStr(d)+ ' Days '+IntToStr(h)+' Hours '+IntToStr(m)+
' Minutes '+IntToStr(s)+' Seconds';
end;
exports uptime;
end. |
maar ik krijg steeds weer de melding:
'project1.exe raised exception class EInvalid pointer with message 'invalid pointer operation' blabla
ik doe dus duidelijk iets fout
maar wat
Bij het maken van een nieuwe DLL roept Delphi zo hard als 'ie kan:
Kijk daar eens naar zou ik zeggen
(vooral dat stukje over dat het de eerste unit in je uses clause moet zijn
)
code:
1
2
3
4
5
6
7
8
9
| { Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. } |
Kijk daar eens naar zou ik zeggen
hmmz, toch eens tijd voor een bril denk ik

Maar kan iemand mij misschien nog een verklaring geven waarom ik in geexporteerde functies in dll's geen return type string kan gebruiken? (zonder ShareMem etc. dan)

Maar kan iemand mij misschien nog een verklaring geven waarom ik in geexporteerde functies in dll's geen return type string kan gebruiken? (zonder ShareMem etc. dan)
edit:
hmmz,vaag, ik post een reply maar het topic blijft onderaan
hmmz,vaag, ik post een reply maar het topic blijft onderaan
Anchors zetten?Op zaterdag 13 oktober 2001 05:47 schreef ScitzoFreak het volgende:
klein vraagje nog,
als ik bijv. een memo op een form gooi, hoe zorg ik er dan voor dat die memo ook resized als ik het form resize?
Of Memo op Client zetten.
"The shell stopped unexpectedly and Explorer.exe was restarted."
yes,thank youOp zaterdag 13 oktober 2001 09:11 schreef jelmervos het volgende:
[..]
Anchors zetten?
Of Memo op Client zetten.
Geen probleem, maar dit is wel heel erg basis hoor.Op zondag 14 oktober 2001 00:23 schreef ScitzoFreak het volgende:
[..]
yes,thank you
"The shell stopped unexpectedly and Explorer.exe was restarted."
Het string type in Delphi is specifiek voor Delphi. C en andere talen hebben een andere manier om met strings om te gaan. De standaard voor types die in een Windows DLL gebruikt kunnen worden, zijn afgeleid van types zoals die met name in C gebruikt worden. Vandaar dat er zonder kunstgrepen geen ondersteuning voor Delphi strings in DLL's zit.Maar kan iemand mij misschien nog een verklaring geven waarom ik in geexporteerde functies in dll's geen return type string kan gebruiken? (zonder ShareMem etc. dan)
Als je de Delphi DLL alleen met Delphi/C++ Builder gebruikt kun je dankzij de ShareMem unit en BORLNDMM.DLL toch pascal/delphi strings gebruiken, maar standaard dus niet.
Kijk trouwens ook nog even naar het stdcall directive in verband met DLL's, is ook wel handig om te weten.
Ja ok, maar je moet het maar net ff weten he, ben behoorlijk newbie met delphi/object pascalOp zondag 14 oktober 2001 02:32 schreef jelmervos het volgende:
[..]
Geen probleem, maar dit is wel heel erg basis hoor.
(kon het echt niet vinden
En Antonius, dank voor de heldere verklaring
Pagina: 1