dll i przekazywanie danych

O jezykach programowania w platformach i nie tylko.
mlody87
Gaduła
Gaduła
Posty: 192
Rejestracja: 14 cze 2012, 13:19

dll i przekazywanie danych

Nieprzeczytany post autor: mlody87 »

hej!
Napisalem do sprawdzanie najprostszy chyba programik w mql wywolujacy funkcje z dll i majay wyswietlic komunikat. I tak.... nie dziala ;) Zaczalem sie zastanawiac czy w ogole moje rozumowanie jest poprawne:

mql:

Kod: Zaznacz cały

#import "Project1.dll"
int wyslij(string);

int start()
  {
//----
   wyslij("Dziendobry");
//----
   return(0);
  }
No i mam w dll'ce:

Kod: Zaznacz cały

procedure(tekst:string);
begin
ShowMessage(tekst);
end;
I co najlepsze... nie dziala :P Moze mi ktos podpowiedziec bo nad moja glupota juz mi rece opadaja;) Probowalem tez wyslac aktualna cene, zamienilem ja na stringa, i wyswietlany komunikat z MQLa jest ale juz wywolany z DLLa nie chce dzialac...
Obrazek

ViTESOFT
Stały bywalec
Stały bywalec
Posty: 21
Rejestracja: 07 paź 2012, 04:27

Re: dll i przekazywanie danych

Nieprzeczytany post autor: ViTESOFT »

Witam,

W Delphi/Free Pascalu nie wolno używać wartości deklarowanych jako STRING, zamiast tego trzeba dać albo ShortString (maksymalnie 255 znaków), albo PChar/PAnsiChar (wskaźniki).
W dll-ce trzeba zamienić wskaźnik na łańcuch tekstowy za pomocą funkcji StrPas().

Kod: Zaznacz cały

library Project1;

uses
  SysUtils,
  Classes,
  Dialogs;

{$R *.res}

procedure wyslij(tekst: PChar); stdcall;
begin
  ShowMessage(StrPas(tekst));
end;

exports
  wyslij;

begin
end.
Po drugie, to proszę spróbować wykonać funkcję z dll w init().
ViTE Software Solutions

mlody87
Gaduła
Gaduła
Posty: 192
Rejestracja: 14 cze 2012, 13:19

Re: dll i przekazywanie danych

Nieprzeczytany post autor: mlody87 »

Dzieki za odpowiedz :) hmm czyli dlugosc musi byc z gory okreslona. Czyli moglbym dac np string[20] czy 'stringi' w ogole odpadaja?
pozdrawiam!
Obrazek

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Re: dll i przekazywanie danych

Nieprzeczytany post autor: Pierz Andrzej »

To nie chodzi o to że masz określić z góry długość tylko o to że za pomocą ShortString przekażesz maksymalnie 255 znaków

ja pod c++ tak robię

Kod: Zaznacz cały

extern "C" test void(char*);
void test(char* text)
{
    MessageBox(text);
}
z poważaniem
Andrzej Pierz
FOREX-SERVICE

ODPOWIEDZ