27. oktober 2001 - 17:31Der er
18 kommentarer og 1 løsning
Andvende en DLL
Jeg har en dll, med nogle funktioner i som jeg ønsker at andvend, dll\'en er skrevet i C, men jeg har header filen hvor funktionenerne er defineret.
Spørgsmålet går helt generelt på hvordan jeg andvender funktionerne i mit delphi program
2 af funktionerne i DLL ser ud som her: SCOMMDLL_API int WINAPI PcdRdIOF(PCDCONN PcdConn, DWORD Type, DWORD Address, DWORD Count, LPSTR lpData); SCOMMDLL_API int WINAPI PcdWrOF(PCDCONN PcdConn, DWORD Type, DWORD Address, DWORD Count, LPCSTR lpData);
PCDCONN har nedenstående deklaration:
@type PCDCONN | Handle to connection informations.<nl>This handle is passed by value to most of the Pcdxxx functions, except for functions <f PcdDialDialog>, <f PcdConnectChannel> and <f PcdComOpen> where a pointer to the handler is expected. */ typedef DWORD PCDCONN;
// Open and connection.
#define PCD_PHONESIZE 64 //@def PCD_PHONESIZE | Size of phone number string (64) #define PCD_CHANNELSIZE 64 //@def PCD_CHANNELSIZE | Size of channel string (64) #define PCD_DEVICESIZE 64 //@def PCD_DEVICESIZE | Size of device name (64) #define PCD_SECTIONSIZE 64 //@def PCD_SECTIONSIZE | Size of section string (64) #define PCD_LOCSIZE 64 //@def PCD_LOCSIZE | Size of location name (64)
Der er to måde hvorpå man kan linke til en DLL. Dynamisk og Statisk. Nedenfor viste løsning er den statiske måde at gøre det på. Er der noget galt, vil programmet typisk crashe før det overhovedet er startet. En let måde at finde ud af om man gør det rigtigt eller ej. Da jeg ikke er i besidelse af DLL\'en gør det temmeligt svært. Men jeg prøver. Du må selv \"fedte\" lidt med det, hvis det ikke virker i første omgang. Jeg har givet et par hints.
unit dll_stuff;
interface // skal du f.eks. importere MessageBox gøres det sådan her. function MessageBox(Handle : HWND; Text, Caption : pchar; Flags : DWORD) : DWORD; stdcall; external \'user32.dll\' name \'MessageBoxA\'; // for dit vedkommende vil det se ca. sådan her ud. function PcdRdIOF(PcdConn : DWORD, Type_, Address, Count : DWORD, lpData : pchar) : integer; stdcall; external \'theName.dll\'; function PcdWrOF(PcdConn : DWORD, Type_, Address, Count : DWORD, lpData : pchar) : integer; stdcall; external \'theName.dll\';
// SCOMMDLL_API ved jeg ikke hvad er defineret som. Det er jokeren i dette spil. // WINAPI tyder på at du skal benytte stdcall. Du kan prøve med pascal, safecall eller cdecl i stedet.
// på mig virker det tydeligt at du skal kalde <f PcdComOpen> og evt. <f PcdConnectChannel> // functionerne først.
dkn> Undskyld, men jeg har ikke noget at kigge på det endnu men det er ikke glemt, da jeg mangler den
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.