Avatar billede tet Nybegynder
30. marts 2001 - 02:12 Der er 2 kommentarer og
2 løsninger

DELPHI DLL interface til C++

Hej

Jeg vil gerne oprette en række strenge i mit C++ program og derefter kalde min DELPHI DLL med en pointer til disse streng for derefter, at manipulere strengene direkte ud fra pointerne i DLL\'en. Derefter returnere til C++ med de nu ændrede strenge.

Jeg har lavet en DELPHI DLL der indeholder følgende function:
function GetData(Source, Dest : PChar; MaxLength : Integer) : Integer;
begin
  Dest  := \'bla. bla.\'+#0;
  Result := 10;
end;

Problemet er bare, at den ændrede \"Dest\" ikke bliver skrevet tilbage til min C++ kode.

Delphi giver også en advarsel om, at \"Value assigned to \'Dest\' never used.

Hvad gør jeg galt ?

Mvh T
Avatar billede wisen Nybegynder
30. marts 2001 - 07:39 #1
Du kan ikke overføre pointere mellem to \"programmer\" med mindre de ligger i samme adresseområde, altså som om det var ét program. Det kan skyldes den måde du benytter din DLL-fil på. Jeg har ikke lige 100% styr på hvordan man gør, men det er da en \"ledetråd\"...
Avatar billede martinlind Nybegynder
30. marts 2001 - 09:27 #2
Måske sådan :

function GetData(Source : PChar; out Dest : PChar; MaxLength : Integer) : Integer;

Sådan gør borland med nogle af deres functioner, måske fordi de også skal bruges fra C-Builder.
Avatar billede wisen Nybegynder
30. marts 2001 - 10:01 #3
Prøv at kikke lidt på det her : http://www.inprise.com/borlandcpp/papers/bc360/
Avatar billede tet Nybegynder
31. marts 2001 - 13:10 #4
Tak for hjælpen ! Problemet er løst.

function GetData(cData : PChar; nLength : Integer) : Integer; cdecl;
const
  Data = \'bla. bla.\'
var
  i: Integer;
Begin
  i := 0;
  while (i < nLength) and (cData[i] <> #0) and (i < Length(Data)) do
  begin
    cData[i] := Data[i+1];
    Inc(i);
  end;
  cData[i] := #0;
  Result := Length(Data);
end;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester