abonnement Unibet Coolblue
pi_30749236
Ik heb een dll in c++ geschreven void SendFile(char *FileName){} en probeer deze via Delphi (7) te laden met de volgende code.

1procedure SendFile(FileName: PChar); external FileTransfer.dll';


Maar elke keer als ik deze procedure aanroep dan krijg ik rare tekens in plaats van de FileName als parameter. Ik heb het volgende al geprobeerd.

- char FileName[] (FileTransfer.dll)
- SendFile(FileName: String); (FileTransfer.pas)
- SendFile(FileName: array of char); (FileTransfer.pas)

Maar ik krijg het niet voor elkaar om een string naar de c++ methode te sturen .

De c++ methode werkt overigens wel want als ik direct een waarde toeken aan FileName (FileTransfer.cpp) dan gaat alles goed. Het probleem zit dus in het extern laden van de dll en het aanroepen van de methode.
  dinsdag 20 september 2005 @ 09:16:52 #2
34839 4br4x4s
Enjoy the silence
pi_30749705
Er mist nog een ' voor FileTransfer.dll, maar ik zou denken dat de compiler dat wel aangeeft.

Waar staat de .dll op jouw pc? Heb je die directory in het project in Delphi wel toegevoegd als Search path?
  dinsdag 20 september 2005 @ 09:33:23 #3
24492 Flurry
Het was een mooie tijd
pi_30749974
var sFilename : string;
begin
sFilename := 'bla.txt';
Sendfile(@sFilename[1]);
end;

zou op zich moeten werken, anders

var sFilename : string;
begin
sFilename := 'bla.txt';
Sendfile(Pchar(sFilename));
end;

edit:
en zo definiėren idd (alleen pchars mogen aan dll's worden meegegeven volgens mij, geen delphi strings):
procedure SendFile(FileName: PChar);

[ Bericht 24% gewijzigd door Flurry op 20-09-2005 09:35:42 (half antwoord) ]
We cross our bridges when we come to them and burn them behind us, with nothing to show for our progress except a memory of the smell of smoke, and a presumption that once our eyes watered.
pi_30753228
quote:
Op dinsdag 20 september 2005 09:33 schreef Flurry het volgende:
var sFilename : string;
begin
sFilename := 'bla.txt';
Sendfile(@sFilename[1]);
end;

zou op zich moeten werken, anders

var sFilename : string;
begin
sFilename := 'bla.txt';
Sendfile(Pchar(sFilename));
end;

edit:
en zo definiėren idd (alleen pchars mogen aan dll's worden meegegeven volgens mij, geen delphi strings):
procedure SendFile(FileName: PChar);
Dat had ik dus ook al geprobeerd maar Delphi maakt er nog steeds wartaal van. Ik heb de dll methode ook getest in c++ en visual basic en in beide gevallen gaat het wel goed. Zelfs als ik het type in mijn c++ code van char* naar PCHAR verander gaat het nog fout . Vreemd genoeg heb ik nooit problemen gehad met dll's geschreven in object pascal en pchar types.
  dinsdag 20 september 2005 @ 12:02:16 #5
24492 Flurry
Het was een mooie tijd
pi_30753489
kan je kijken wat ie precies meegeeft (het adres waar de pointer naar wijst) en wat er aankomt in de dll? als dat hetzelfde is heeft ie moeite met het verwerken van de data en anders gaat er iets mis met het doorgeven van het argument.
We cross our bridges when we come to them and burn them behind us, with nothing to show for our progress except a memory of the smell of smoke, and a presumption that once our eyes watered.
pi_30755314
Probeer eens op www.nldelphi.com
Dat is HET "fok!forum" onder de Delphi Forums!

Of kijk eens op:
http://delphi.about.com/od/objectpascalide/a/dlldelphi.htm

of

http://www.drbob42.com/delphi/headconv.htm
quote:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 var
   Hbar: Thandle;
   Foo: procedure (X: Integer); {$IFDEF WIN32} stdcall; {$ENDIF}
 begin
   Hbar := LoadLibrary('BAR.DLL');
   if Hbar >= 32 then { success }
   begin
     Foo := GetProcAddress(HBar, 'FOO');
     ...
     Foo(1);
     ...
     FreeLibrary(HBar);
   end
   else
     MessageDlg('Error: could not find BAR.DLL', mtError, [mbOk], 0)
 end.
-= Rogue lvl 66 =- -= Warrior lvl 70 =- -= Warlock lvl 70 =-
----------============= Nordrassil =============----------
abonnement Unibet Coolblue
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')