Toon posts:

[delphi] DLL Problemen (dit topic werkt wel)

Pagina: 1
Acties:

Verwijderd

Wehhehe nee werkt ook niet hoor..

mgoed ontbrakt... hier maar verder gaan?

Verwijderd

Topicstarter
Ik dacht al dat ik gek werd :7

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 :'( :?

  • wizl
  • Registratie: Maart 2001
  • Laatst online: 27-02-2023

wizl

hmmz

Bij het maken van een nieuwe DLL roept Delphi zo hard als 'ie kan:
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 :P (vooral dat stukje over dat het de eerste unit in je uses clause moet zijn ;) )

Verwijderd

Of gebruik shortstring ipv string :)

Verwijderd

Topicstarter
hmmz, toch eens tijd voor een bril denk ik 8-) :+

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 :?

Verwijderd

Topicstarter
Hm, dan schop ik em toch ff omhoog hoor, anders leest niemand men vraagje meer :'( ;)


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?

alvast bedankt :+

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

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?
Anchors zetten?

Of Memo op Client zetten.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Topicstarter
Op zaterdag 13 oktober 2001 09:11 schreef jelmervos het volgende:

[..]

Anchors zetten?

Of Memo op Client zetten.
yes,thank you ;)

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Op zondag 14 oktober 2001 00:23 schreef ScitzoFreak het volgende:

[..]

yes,thank you ;)
Geen probleem, maar dit is wel heel erg basis hoor. :)

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Antonius
  • Registratie: Juli 2000
  • Laatst online: 17-09 21:19
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)
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.

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.

Verwijderd

Topicstarter
Op zondag 14 oktober 2001 02:32 schreef jelmervos het volgende:

[..]

Geen probleem, maar dit is wel heel erg basis hoor. :)
Ja ok, maar je moet het maar net ff weten he, ben behoorlijk newbie met delphi/object pascal :P
(kon het echt niet vinden :+ )

En Antonius, dank voor de heldere verklaring ;)

Verwijderd

Maar er ipv. strings gewoon PCHARs van... :)
Pagina: 1