Thread View: pl.comp.lang.c
3 messages
3 total messages
Started by julek w.
Wed, 05 Nov 1997 15:38
Klopot z DLL
Author: julek w.
Date: Wed, 05 Nov 1997 15:38
Date: Wed, 05 Nov 1997 15:38
44 lines
1672 bytes
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
Author: Piotru$
Date: Wed, 05 Nov 1997 22:40
Date: Wed, 05 Nov 1997 22:40
50 lines
2131 bytes
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
Author: Piotr Miller
Date: Thu, 06 Nov 1997 08:59
Date: Thu, 06 Nov 1997 08:59
24 lines
1302 bytes
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