Jeg klodsede vist lidt i det (40 cm fejl): Der skulle stå
__declspec(dllimport)
(Ikke export - lidt forvirrende, men klippe klister funktionen fik lige fat i den forerte linie.)
Jeg vil ikke konvertere DLL\'en. Jeg har bare noget C++ kode jeg vil lave om til Delphi. Hvordan skal jeg så skrive i mit Delphi interface for kunne kalde rutinerne i FIREi.DLL?
DLL Import and Export Functions Microsoft Specific —>
The dllimport and dllexport storage-class modifiers are Microsoft-specific extensions to the C language. These modifiers explicitly define the DLL’s interface to its client (the executable file or another DLL). Declaring functions as dllexport eliminates the need for a module-definition (.DEF) file. You can also use the dllimport and dllexport modifiers with data and objects.
The dllimport and dllexport storage-class modifiers must be used with the extended attribute syntax keyword, __declspec, as shown in this example:
Jamen Jens det bliver jeg bare ikke vildt meget klogere af (jeg har også prøvet at se i MSDN forvirr... øhh dokumentationen). Jeg er bare stadig så ny i C++, at jeg ikke har tilstrækkeligt styr på begreber som \"storage-class modifiers\", \"module-definition (.DEF) file\" osv.
Du er vel nu med på, at jeg har en DLL indeholdende nogle rutiner jeg skal bruge. Den eneste dolumentation jeg har er en C++ header fil, der beskriver funktionerne som fx:
Jo jeg har MSDN, men den er efter min fattige mening ikke specielt god. På dette felt er Delphis online hjælp LANGT bedre. Bare så \"simpel en ting\" som eksempler er der meget lng imellem i MSDN hjælpen.
Svarer du så på mit spørgsmål eller skal du lokkes lidt mere :)
Det er vel ikke nødvendigt at smide hele skidtet i hovedet på dig. Problemet er vel ikke så stort: Jeg regner med at min Delphi code skal se ud som noget i retning af:
Const DllName = \'FIREi.DLL\';
Function FiBusReset(AdapterNumber : LongWord; ShortReset : LongBool); external DllName;
Er det nok, eller skal der stå noget med \"stdcall\" eller \"ccall\" eller hur?
Function FiBusReset(AdapterNumber : LongWord; ShortReset : LongBool); stdcall external DllName;
Hvad vil hvad sige ? En kalde konvention ? Eller hvad ?
En kalde konvention er i det her tilfælde et spørgsmål om hvilken rækkefølge som parameterne blver helt på stacken i og hvilke registere der indeholde hvilke parametre ...
Keyword Stack cleanup Parameter passing __cdecl Caller Pushes parameters on the stack, in reverse order (right to left) __stdcall Callee Pushes parameters on the stack, in reverse order (right to left) __fastcall Callee Stored in registers, then pushed on stack thiscall (not a keyword) Callee Pushed on stack; this pointer stored in ECX
På http://www.trsoft.de/freeware.html er jeg iøvrigt faldet over en C++ -> Delphi konverterings guide. Den er lidt gammel og den dækker ikke det aktuelle problem, men ellers er den da meget god.
Er der nogen andre der har noget tilsvarende info?
Dem så jeg slet ikke.... Jeg søgte på noget C++ -> Delphi convertering og fik et link til den guide. Resten af sitet har jeg overhovedet slet ikke studeret...
Jeg har ikke testet det endnu, men jeg har sendt en fil til dig - så kan du se.
Spændende at se om jeg nu har fået oversat tingene korrekt....
Peter
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.