Skocz do zawartości

[Delphi] Biblioteka do GM'a. Okienko nie wyświetla znaków


Bedi

Rekomendowane odpowiedzi

Witam :) Ostatnio właśnie próbowałem coś wykrzesać do GM'a (okienka od Windowsa, nie od GM'a) i mam to proste ShowMessage. I mam taki problem, bo jak mam kod:

function Wiadomosc(): pchar; stdcall;
begin
  ShowMessage('Jakiś tam tekst');
end;

exports Wiadomosc;

begin
end.

I później w GM'ie dam że ma tą funkcję odczytać:

GML
Message = external_define(global._DLL_Name, "Wiadomosc", dll_stdcall, ty_string, 0);

I wykonam to, to okienko się pokazuje z tym napisem "Jakiś tam tekst". Ale jak zrobię tak:

function Wiadomosc(tekst: pchar): pchar; stdcall;
begin
  ShowMessage(tekst);
end;

exports Wiadomosc;

begin
end.

I w GM'ie dam taki skrypt:

GML
Message = external_define(global._DLL_Name, "Wiadomosc", dll_stdcall, ty_string, 1, ty_string);
GML
//Skrypt DLL_Mess

external_call(Message, argument0);

A w obiekcie dam:

GML
DLL_Mess("tekst");
To nie wyświetla "tekst" tylko same kwadraty.

 

Dodam, że w kompilatorze/debuggerze jest ostrzeżenie "[DCC Warning] TestDLL.dpr(32): W1035 Return value of function 'Wiadomosc' might be undefined". Ale nie wiem jak zdefiniować zwracaną wartość ? O ile dobrze przetłumaczyłem :P

 

Czy idzie to jakoś zrobić, żeby wyświetlało te znaki ? Z góry dzięki :)

Odnośnik do komentarza
Udostępnij na innych stronach

nie zwracasz żadnej wartości, mimo iż masz to zdeklarowane w GMie. musisz zawsze coś zwracać, aby GM nie sypał błędami - jeśli nie zwracasz nic szczególnego, niech zwraca real rowny 1 lub 0, lub konkretna wartosc jesli cos musi zwrocic funkcja. i nie pomyl typow. bo widze ze masz zwracanie stringa zadeklarowane w GMie, wiec albo zamien to na ty_real i zwroc 1, albo zwracaj jakis pusty string w DLLce (pierwsza opcja lepsza)

 

function Wiadomosc(tekst: pchar): real; stdcall;
begin
  ShowMessage(tekst);
  result:=1;
end;

 

GML
Message = external_define(global._DLL_Name, "Wiadomosc", dll_stdcall, ty_real, 1, ty_string);
Odnośnik do komentarza
Udostępnij na innych stronach

Czy bym skopiował kod, czy bym coś pozmieniał, przepisał, i tak nie wyświetla tekstu, tylko ostatnią literkę, reszta - kwadraciki. Ale dobrze wiedzieć że w taki sposób trzeba coś zwracać ;) Może gdzieś indziej tkwi błąd? W GM'ie raczej nie, bo wszystko jest tak jak napisałem.

 

E: Głównie interesują mnie biblioteki niż programy w Delphi, ale biblioteki pod programy napisane w Delphi wyglądają całkiem inaczej niż te do GM'a. Dlatego pytam :)

Odnośnik do komentarza
Udostępnij na innych stronach

zapodaj tresc funkcji ShowMessage()

Odnośnik do komentarza
Udostępnij na innych stronach

myslalem ze sam ja napisales ;p mniejsza o to.

 

ShowMessage(const Msg: string);

to zobaczylem w dokumentacji. skoro to string to musisz przekonwertowac pchar na stringa i dopiero mu dac jako argument

Odnośnik do komentarza
Udostępnij na innych stronach

Ano dzięki Pieter :) Działa. Mam jeszcze takie jedno pytanie. Mam w bibliotece warunek, że jeśli jest przekazana jakaś wartość, to ma się dane okienko pokazać. Ale mniejsza to, bo w bibliotece wszystko dobrze jest. I mam w GM'ie funkcję (skrypt) Message i w nim taki kod:

GML
switch (argument2)

{

case 1: external_call(...);

case 2: external_call(...);

case 3: external_call(...);

}

(jak będzie trzeba, to podam tą zawartość). No i jeśli podam argument2 "3", to pokazuje jedno okienko, takie jak ustaliłem w bibliotece i jest dobrze. Ale jak ustawie 2 argument "1" to wyświetla po kolei te 3 warunki, tak jakbym nie miał w ogóle tego switch. Jeśli bez switcha dam jedno external_call z wybraną wartością, to też pokazuje jedno okienko, i jest dobrze. Może trochę nie zrozumiale napisałem. Ale chyba zrozumiecie o co chodzi. No i to pytanie - dlaczego wykonuje skrypt tak, jakby w ogóle tego switch nie było?
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...