🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

3 total messages Started by julek w. Wed, 05 Nov 1997 15:38
Klopot z DLL
#228
Author: julek w.
Date: Wed, 05 Nov 1997 15:38
44 lines
1672 bytes
Witam,
Napisalem dwie funkcje w C++ i skopmpilowalem to jako DLL

int Inc(short i)
{
      return(i+1);
}

int Add()
{
    return(Inc(10));
}

DLL wyszedl jak ta lala

odpalilem Visual Basic'a i co by VB widzial te funkcje wpisalem co
nastepuje 

Declare Function Inc Lib "biblio.dll" (i as integer) As Integer
Declare Function Add Lib "biblio.dll" () As Integer

potem wywolanie

j=Add
i=Inc(10)

i tu szok, pierwsza funkcja (Add) zadzialala co mnie uszczesliwilo
natomiast przy drugiej (Inc) otrzymalem komunikat:
'Bad DLL calling convention'
Domyslam sie sam ze cos jest pochrzanione z parametrami, probowalem
parametr deklarowac jako  wszystkie mozliwe typy czyli byte, integer
long ...., deklarowane z ByVal i bez (patrz ponizej), i caly czas
kicha......

//Declare Function Inc Lib "biblio.dll" (i as Byte) As Integer
//Declare Function Inc Lib "biblio.dll" (ByVal i as Byte) As Integer
//Declare Function Inc Lib "biblio.dll" ( i as Integer) As Integer

Czy ktos wie jak to wywolac zeby zadzialalo ?????
				poadrawiam julek w.

p.s. funkcyjki sa tylko przykladami

mailto:julekw@laser.com.pl
Re: Klopot z DLL
#229
Author: Piotru$
Date: Wed, 05 Nov 1997 22:40
50 lines
2131 bytes
Cześć!

Wed, 05 Nov 1997 15:38:49 GMT, julekw@laser.com.pl (julek w.)
napisał(a):

>Napisalem dwie funkcje w C++ i skopmpilowalem to jako DLL
>
>int Inc(short i)
>{
>      return(i+1);
>}
>
>int Add()
>{
>    return(Inc(10));
>}

[...]

>j=Add
>i=Inc(10)
>
>i tu szok, pierwsza funkcja (Add) zadzialala co mnie uszczesliwilo
>natomiast przy drugiej (Inc) otrzymalem komunikat:
>'Bad DLL calling convention'

Czy przy pisaniu DLLa zwróciłeś uwagę na konwencję przekazywania
parametrów? Zwykle dla funkcji w DLLach przyjmuje się konwencję
"pascal".
Co prawda w przypadku funkcji jednoargumentowej użycie konwencji "C"
nie powinno (?) przeszkadzać ( przynajmniej gdy się bawiłem różnymi
niedozwolonymi teoretycznie przypadkami, w tym możliwością
przekazywania do funkcji z DLL parametrów w inny sposób niż miała to
zdefiniowane - tak dla jaj, nie było problemów z jednoargumentowymi )
ale może ...

Drugie co mi przychodzi do głowy tak na szybko: czy obydwa kompilatory
generują kod 16(32)-bitowy? Wydaje mi się że w przypadku 16bitowego
DLLa do którego odwołujesz się z aplikacji 32bitowej (bądź na odwrót)
mogą być jaja. Nie próbowałem tego robić więc nie wiem czy w ogóle
jest to możliwe. Po prostu tak mi przyszło do głowy. Czy ktoś wie czy
tak się w ogóle da i jak to zrobić?

Pozdrawiam

   ______________________
/                                            <
I      < Piotru$ >   Piotr Olech
I      mailto: pit4ever@friko.onet.pl
\ ___________________________>
Re: Klopot z DLL
#230
Author: Piotr Miller
Date: Thu, 06 Nov 1997 08:59
24 lines
1302 bytes

julek w. <julekw@laser.com.pl> napisał(a) w artykule
<34608d79.17016432@news.tpsa.pl>...
> Witam,
> Napisalem dwie funkcje w C++ i skopmpilowalem to jako DLL
> 

Ja z kolei widzial bym problem w tym, ze pisales to pod C++. Poniewaz
funkcja Inc ma jeden argument typu short wynikowa nazwa tej funkcji jest
inna niz Inc. C++ umozliwiajac przeciazanie nazw funkcji modyfikuje ich
nazwy dodajac przed wlasciwa nazwa typ argumentu. Nazywa sie to chyba name
mangling. Aby temu zapobiec musisz zadeklarowac ta funkcje jako funckcje C.

Pozdrawiam


-- 
Piotr Miller

Politechnika Lubelska
Katedra Sieci Elektrycznych i Zabezpieczeń

MILLER@Elektron.pol.lublin.pl
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads