DLL prošnja

Win32 api funkcije.
Odgovori
ekisoft
Prispevkov: 2
Pridružen: 17.02.2011 13:35:49

DLL prošnja

Odgovor Napisal/-a ekisoft » 02.01.2012 23:13:58

Pozdravljeni.

Rad bi uporabil eno dll datoteko v delphiju (nekaj.dll), ki je pisana v c-ju. V datoteki nekaj.h so definirane funkcije tako:

Koda: Izberi vse

//
// Initialize SDK
//
__declspec( dllexport ) BS_RET_CODE __stdcall BS_InitSDK();

//
// Initialize socket
//
__declspec( dllexport ) BS_RET_CODE __stdcall BS_OpenSocket( const char* biostationAddr, int port, int* handle );
Kako bi to moral definirati v delhiju? Prosim za pomoč. Hvala že v naprej.

ekisoft
Prispevkov: 2
Pridružen: 17.02.2011 13:35:49

Re: DLL prošnja

Odgovor Napisal/-a ekisoft » 03.01.2012 09:31:07

Nekaj sem se sam trudil in hotel zadevo testirat, pa mi zadeva zmrzne pri klicanju DLLFunc1. Očitno nekaj hudo delam narobe oz. še nikoli nisem tega delal. Dllfunc, ki je brez parametrov gre skozi. Prosim za kašno idejo kako naj se tega lotim (sem preiskal ves forum, e-knjige, pa mi ne gre). Hvala.

Koda: Izberi vse

procedure TForm1.Button1Click(Sender: TObject);
{define a procedure type with required parameters of your procedure in the DLL}
 type
   PHandle=^Integer;
   TDLLFunc = procedure();
   TDLLFunc1 = procedure(biostationAddr:pchar;port:integer;handle:PHandle);

 {assign a nil - not loaded function}
 const
   DLLFunc: TDLLFunc = nil;
   DLLFunc1: TDLLFunc1 = nil;

 {handle of loaded dll}
 var
  DLLHandle: THandle;
  Handl:integer;

  begin
 { load a library }
 DLLHandle := LoadLibrary('BS_SDK.DLL');
 Handl:=0;

 if (DLLHandle < HINSTANCE_ERROR) then
     raise Exception.Create('BS_SDK.DLL' + ' library can not be loaded or not found. ' + SysErrorMessage(GetLastError));

   try
     { load an address of required procedure}
     @DLLFunc := GetProcAddress(DLLHandle, 'BS_InitSDK');
    
     {if procedure is found in the dll}
     if Assigned(DLLFunc) then
     begin
       DLLFunc();
     end;

     { load an address of required procedure}
     @DLLFunc1 := GetProcAddress(DLLHandle, 'BS_OpenSocket'); //BS_OpenSocket( const char* biostationAddr, int port, int* handle );

     {if procedure is found in the dll}
     if Assigned(DLLFunc1) then
     begin
       [b]DLLFunc1('192.168.2.90',1480,@Handl);[/b]
       MessageDlg(IntTostr(Handl),mtConfirmation, [mbOk], 0);       
     end;

   finally
     {unload a library}
     FreeLibrary(DLLHandle);
   end;

odisej
Prispevkov: 1363
Pridružen: 09.05.2003 12:58:10

Re: DLL prošnja

Odgovor Napisal/-a odisej » 03.01.2012 14:00:11

Mogoče kakšen stdcall. Sam sicer ne razumem čisto točno kdaj stdcall in kdaj ne, ampak če potrebuješ, boš prebral malo helpa na to temo.

Odgovori