/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
DLL problemer
Fra : Claus Bagger


Dato : 10-06-02 12:08

Jeg forsøger at lave en DLL I Delphi 5, som skal bruges I C++. I
hovedprogrammet DllFirst er der en procedure TEST som kalder forskellige
metoder, hvor hovedberegningerne foretages (CalculateImage1Click). Jeg har
en Dll kaldet FRAME, hvor TEST eksporteres. Når jeg kalder Dll'en i CALL, så
sker der ingenting i procedure TEST, hvis den indeholder metoden
MainForm.Analyseimage1.Click. Hvis den ikke indeholder denne metode, så
fungere DLL fint og der skrives til filen. Hvorfor kan jeg ikke få
beregningerne til at fungerer ? Jeg håber, at nogen kan hjælpe, da jeg har
kænpet med dette problem i flere uger nu.

På forhånd tak.



Venlig hilsen

Claus Bagger

Danmarks Tekniske Universitet



----------------------------------------------------------------------------
----------------------------

THIS IS THE MAIN PROGRAM WHERE CALCULATIONS TAKE PLACE



unit DllFirst;



interface



uses

ShareMem, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,

Menus, StdCtrls, ExtCtrls, ComCtrls, TeEngine, Series, TeeProcs,

Chart;



Function Getstring : string ; export ;

Procedure test; export ;



type

TMainForm = class(TForm)

MainMenu1: TMainMenu;

procedure Analyseimage1Click(Sender: TObject); export ;

procedure CalculateImage1Click(Sender: TObject) ;



procedure TMainForm.Analyseimage1Click(Sender: TObject);

begin

CalculateImage1Click(Sender) ; // Not shown in this example

end;



Procedure test ;

var

TestFile : TextFile ;



begin

MainForm.Analyseimage1.Click ;

// Write to file

AssignFile(TestFile, 'TestFile');

Rewrite(TestFile) ;

writeln(TestFile,'Data for test series : ') ;

writeln(TestFile,'DLL Test OK') ;

CloseFile(TestFile);

end ;



THIS IS THE DLL

----------------------------------------------------------------------------
---------------------------

library Frame;



uses

ShareMem,

SysUtils,

Classes,

DllFirst;



{$R *.RES}



Exports

Test ;



begin

end.





THIS IS THE CALLING PROGRAM

----------------------------------------------------------------------------
-----------

program Call;

{$APPTYPE CONSOLE}

uses

Sharemem,

SysUtils,

Dialogs ,

Windows ;



{$R *.RES}



Procedure test ; external 'Frame.dll' ;



Type

THandle = integer ;



Var

Handle : THandle ;



begin

Handle := LoadLibrary('Frame.dll');

IF handle <> 0 THEN

begin

test ;

end ;

FreeLibrary(handle) ;

end.










 
 
René Jensen (10-06-2002)
Kommentar
Fra : René Jensen


Dato : 10-06-02 16:50

Claus Bagger wrote:
> Jeg forsøger at lave en DLL I Delphi 5, som skal bruges I C++.

Sidder lige og tænker ... hvorfor bruger du Delphi til at compilere en
..DLL, fremfor at bruge C++ Builder i stedet for, eller Microsoft Visual
C++? Ikke fordi at C++ Builder ikke kan benytte .DLL'er compilet i
Delphi (og vice versa), men hvis resten af applikationen skal skrives i
C/C++, hvorfor så benytte Delphi?

--
Med venlig hilsen,
René Jensen

Once a upon a time a wise man said to me:
"I consider Windows like I consider bad weather ... I accept it and hope
for something better"

Claus Bagger (11-06-2002)
Kommentar
Fra : Claus Bagger


Dato : 11-06-02 08:18

Vi har flere års erfaring med udvikling i Pascal, og vi har ingen erfaring i
c eller c++. Desuden er det en udenlandsk samarbejdspartner, som skal
benytte DLL'en, og de benytter c++.
Venlig hilsen
Claus Bagger

"René Jensen" <rene.jensen@adslhome.dk> skrev i en meddelelse
news:3D04CABC.33DF47E1@adslhome.dk...
> Claus Bagger wrote:
> > Jeg forsøger at lave en DLL I Delphi 5, som skal bruges I C++.
>
> Sidder lige og tænker ... hvorfor bruger du Delphi til at compilere en
> .DLL, fremfor at bruge C++ Builder i stedet for, eller Microsoft Visual
> C++? Ikke fordi at C++ Builder ikke kan benytte .DLL'er compilet i
> Delphi (og vice versa), men hvis resten af applikationen skal skrives i
> C/C++, hvorfor så benytte Delphi?
>
> --
> Med venlig hilsen,
> René Jensen
>
> Once a upon a time a wise man said to me:
> "I consider Windows like I consider bad weather ... I accept it and hope
> for something better"



René Jensen (11-06-2002)
Kommentar
Fra : René Jensen


Dato : 11-06-02 18:38

Claus Bagger wrote:
> Vi har flere års erfaring med udvikling i Pascal, og vi har ingen erfaring i
> c eller c++. Desuden er det en udenlandsk samarbejdspartner, som skal
> benytte DLL'en, og de benytter c++.

Ok, så bare glem min kommentar.

--
Med venlig hilsen,
René Jensen

Once a upon a time a wise man said to me:
"I consider Windows like I consider bad weather ... I accept it and hope
for something better"

Uffe Kousgaard (11-06-2002)
Kommentar
Fra : Uffe Kousgaard


Dato : 11-06-02 11:18

Der ser ud til at være flere problemer:

1) Du bruger Sharemem. Dette kan man næppe med C++. Du skal bruge pchar
ved eksporterede funktioner i stedet for string. Du bruger ikke
funktionen GetString, så det er måske ikke der problemet ligger?

2) Du kalder en metode på et objekt, som ikke er instantieret. Hvorfor
definerer du ikke denne metode som en almindelig metode i stedet for en
metode i en klasse? Så vidt jeg kan se bruger du ikke klassen til noget.

3) Generelt skal funktioner og procedurer eksporteres med stdcall for at
være mest universelt anvendelige. Hele WIN32API anvender stdcall.

Håber dette hjælper.

Hilsen
Uffe

"Claus Bagger" <cb@ipl.dtu.dk> wrote in message
news:ae21db$9vo$1@news.net.uni-c.dk...
> Jeg forsøger at lave en DLL I Delphi 5, som skal bruges I C++. I
> hovedprogrammet DllFirst er der en procedure TEST som kalder
forskellige
> metoder, hvor hovedberegningerne foretages (CalculateImage1Click). Jeg
har
> en Dll kaldet FRAME, hvor TEST eksporteres. Når jeg kalder Dll'en i
CALL, så
> sker der ingenting i procedure TEST, hvis den indeholder metoden
> MainForm.Analyseimage1.Click. Hvis den ikke indeholder denne metode,

> fungere DLL fint og der skrives til filen. Hvorfor kan jeg ikke få
> beregningerne til at fungerer ? Jeg håber, at nogen kan hjælpe, da
jeg har
> kænpet med dette problem i flere uger nu.
>
> På forhånd tak.
>
>
>
> Venlig hilsen
>
> Claus Bagger
>
> Danmarks Tekniske Universitet
>
>
>
> ----------------------------------------------------------------------
------
> ----------------------------
>
> THIS IS THE MAIN PROGRAM WHERE CALCULATIONS TAKE PLACE
>
>
>
> unit DllFirst;
>
>
>
> interface
>
>
>
> uses
>
> ShareMem, Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms,
> Dialogs,
>
> Menus, StdCtrls, ExtCtrls, ComCtrls, TeEngine, Series, TeeProcs,
>
> Chart;
>
>
>
> Function Getstring : string ; export ;
>
> Procedure test; export ;
>
>
>
> type
>
> TMainForm = class(TForm)
>
> MainMenu1: TMainMenu;
>
> procedure Analyseimage1Click(Sender: TObject); export ;
>
> procedure CalculateImage1Click(Sender: TObject) ;
>
>
>
> procedure TMainForm.Analyseimage1Click(Sender: TObject);
>
> begin
>
> CalculateImage1Click(Sender) ; // Not shown in this example
>
> end;
>
>
>
> Procedure test ;
>
> var
>
> TestFile : TextFile ;
>
>
>
> begin
>
> MainForm.Analyseimage1.Click ;
>
> // Write to file
>
> AssignFile(TestFile, 'TestFile');
>
> Rewrite(TestFile) ;
>
> writeln(TestFile,'Data for test series : ') ;
>
> writeln(TestFile,'DLL Test OK') ;
>
> CloseFile(TestFile);
>
> end ;
>
>
>
> THIS IS THE DLL
>
> ----------------------------------------------------------------------
------
> ---------------------------
>
> library Frame;
>
>
>
> uses
>
> ShareMem,
>
> SysUtils,
>
> Classes,
>
> DllFirst;
>
>
>
> {$R *.RES}
>
>
>
> Exports
>
> Test ;
>
>
>
> begin
>
> end.
>
>
>
>
>
> THIS IS THE CALLING PROGRAM
>
> ----------------------------------------------------------------------
------
> -----------
>
> program Call;
>
> {$APPTYPE CONSOLE}
>
> uses
>
> Sharemem,
>
> SysUtils,
>
> Dialogs ,
>
> Windows ;
>
>
>
> {$R *.RES}
>
>
>
> Procedure test ; external 'Frame.dll' ;
>
>
>
> Type
>
> THandle = integer ;
>
>
>
> Var
>
> Handle : THandle ;
>
>
>
> begin
>
> Handle := LoadLibrary('Frame.dll');
>
> IF handle <> 0 THEN
>
> begin
>
> test ;
>
> end ;
>
> FreeLibrary(handle) ;
>
> end.
>
>
>
>
>
>
>
>
>


Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste