Det var brukt _export _far _pascal i prosedyredefinisjonene
Etter litt googling fant jeg at _export burde erstattes med
__declspec(dllexport), mens _far _pascal burde byttes ut med WINAPI
To av prosedyrene som hadde _far _pascal lot seg ikke kompilere
med WINAPI
error C2061: syntax error : identifier 'PerfCalc1'
error C2059: syntax error : ';'
error C2059: syntax error : 'type'
men når jeg fjernet WINAPI på disse fikk jeg laget en dll
Dll-en skal benyttes fra et VB-program og der får jeg DLL Entry Point not found
på en av prosedyrene som er deklarert med __declspec(dllexport) WINAPI
Noen som kan sette meg på rett spor?
--
Njål Fisketjøn
> Dll-en skal benyttes fra et VB-program og der får jeg DLL Entry Point not found
> på en av prosedyrene som er deklarert med __declspec(dllexport) WINAPI
>
>
> Noen som kan sette meg på rett spor?
1. Sjekk evt. deklarasjonen av prosedyra i VB-koden, og samanlikn med
C-koden.
2. Forskjell i store/små bokstavar mellom dei to?
3. Har du eventuelt ei .DEF fil med EXPORTs som treng oppdatering?
-+-Ben-+-
>Njål Fisketjøn skreiv:
>
>> Dll-en skal benyttes fra et VB-program og der får jeg DLL Entry Point not found
>> på en av prosedyrene som er deklarert med __declspec(dllexport) WINAPI
>>
>>
>> Noen som kan sette meg på rett spor?
>
>1. Sjekk evt. deklarasjonen av prosedyra i VB-koden, og samanlikn med
>C-koden.
>
Har Microsoft endret noe her? VB-koden (VB 3.0) har kjørt med disse
deklarasjonene i årevis.
>2. Forskjell i store/små bokstavar mellom dei to?
Nei, men visse hjelpetekster antyder at når det var brukt _pascal ville alle
eksporter være "uppercase". Likevel har det som sagt fungert i årevis.
>
>3. Har du eventuelt ei .DEF fil med EXPORTs som treng oppdatering?
Det er mulig, den ser slik ut
LIBRARY TESTSYS
EXETYPE WINDOWS
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD MOVEABLE SINGLE
HEAPSIZE 1024
EXPORTS SEGetCalcValue
PerfCalc1
PerfCalc2
SetConstants
GetConstant
SetFlowCorrTable
GetFlowCorrValue
SetXYArray
GetInterpolateValue
Må jeg luke bort noe av __declspec(dllexport) WINAPI når det finnes en .DEF-fil?
Må man fortelle kompilatoren at det finnes en .DEF-fil?
--
Njål Fisketjøn
Jeg mistenker at DLL i 16-bit windows brukte 2 byte for integer, men at det nå
gir 4-byte, og at jeg må endre alle DLL-deklarasjoner som bruker integer nå må
bruke Long. Kan det stemme?
--
Njål Fisketjøn
> Kom et stykke videre ved å legge til def-filen i "prosjektet". Nå finner
> programmet Entry points i Dll-en. Problemet er bare at VB krasjer ved kall til
> en enkel funksjon.
Då er det vel sannsynleg at det er noko som er _forskjellig_ mellom
akkurat denne funksjonen og resten. Manglar den i .DEF/exports, eller er
den deklarert annleis, t.d.?
> Jeg mistenker at DLL i 16-bit windows brukte 2 byte for integer, men at det nå
> gir 4-byte, og at jeg må endre alle DLL-deklarasjoner som bruker integer nå må
> bruke Long. Kan det stemme?
Du seier vel strengt teke ikkje kva C-kompilator du bruker, men om det
er ein av Microsoft sine, så er nok typen "int" mest sannsynleg 32-bit i
win32-kompileringar. (Meiner du "Long" og "Integer" i VB, så spør du i
feil gruppe...)
-+-Ben-+-
>> Jeg mistenker at DLL i 16-bit windows brukte 2 byte for integer, men at det nå
>> gir 4-byte, og at jeg må endre alle DLL-deklarasjoner som bruker integer nå må
>> bruke Long. Kan det stemme?
>
>Du seier vel strengt teke ikkje kva C-kompilator du bruker, men om det
>er ein av Microsoft sine, så er nok typen "int" mest sannsynleg 32-bit i
>win32-kompileringar. (Meiner du "Long" og "Integer" i VB, så spør du i
>feil gruppe...)
Microsoft Visual Studio 6.0
Jeg endret typedeklareringene i VB til Long (fra Integer). Kunne muligens også
endret C-deklarasjonene fra int til short, men nå fungerer det tilsynelatende
som det skal.
Takk for tipset ang. def-filen. :)
--
Njål Fisketjøn