Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 3.624 pregleda

Najnovija ↓

Par pitaja vezano za builder... 12.06.2007. u 20:21 · pre 236 meseci #1
Kao prvo da vas pozdravim :)
Imam par pitanja (kao sto pise u naslovu)

Zanima me

1 kako se u builderu prave dll fjlovi

volio bi kratak kod ako moze npr dll koji primi
dva AnsiStringa a i b i vrati nezultat a+b
primer je besmislen ali cisto da vidim kako
to radi tj kod koji treba da se pise u daj dll

2 kako da se taj dll pozove iz nekog programa

takodje voleo bi kod :)

3 kako u builderu da preko FTPa prebacijemo fajlove

kratak kod ili upustvo :) naravno za frp koristim sa usernem i passwordom pored ipa i porta



hvala unapred svima
Potpis
http://www.knjigaimena.com
Re: Par pitaja vezano za builder... 12.06.2007. u 21:12 · pre 236 meseci #2
Citat:

1 kako se u builderu prave dll fjlovi

Postoji DLL Wizzard (File > New > Other > DLL Wizzard).

Citat:

volio bi kratak kod ako moze npr dll koji primi dva AnsiStringa a i b i vrati nezultat a+b
primer je besmislen ali cisto da vidim kako to radi tj kod koji treba da se pise u daj dll

Iako taj DLL Wizzard nudi da biraš mogućnost korišćenja VCL-a, odnosno AnsiString-ova,
po nekim preporukama ja samo koristim čist API kada su u pitanju DLL-ovi.

Citat:

2 kako da se taj dll pozove iz nekog programa

Samo dodaš LIB fajl koji se dobije uz Buildovanje DLL-a, i posle koristiš funkcije po želji.

Citat:

takodje voleo bi kod :)

1. napravi ručno jedan Header fajl i snimi ga u neki glavni Projektni folder:
--- DLL.H ---
Code:

#ifndef DllH
#define DllH

  #ifdef BUILDING_DLL
    #define MY_FUNC __declspec(dllexport)
  #else
    #define MY_FUNC __declspec(dllimport)
  #endif

  #ifdef __cplusplus
    extern "C" {
  #endif

  MY_FUNC int __stdcall Zbir( int X,int Y );

  #ifdef __cplusplus
    }
  #endif

#endif

2. Pokreni DLL Wizzard
3. Dodaj kod (otprilike ovako):
Code:

#include <windows.h>
#define BUILDING_DLL
#include "Dll.h"
#pragma argsused
int __stdcall Zbir( int X, int Y )
{
    return ( X + Y );
}

4. Snimi, Builduj, u folderu bi trebalo da imas i DLL i LIB
5. Napravi normalnu Windows Forms aplikaciju (snimi recimo isto gde i DLL).
6. Dodaj LIB od DLLa u Projekat (Add to Project...)
7. Kod po želji:
Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ShowMessage( Zbir( 2, 3 ) );        
}

Eto, otprilike tako, netestirano... nadam se da nisam nešto ispustio.

Citat:

3 kako u builderu da preko FTPa prebacijemo fajlove
kratak kod ili upustvo :) naravno za frp koristim sa usernem i passwordom pored ipa i porta

Novo pitanje uvek postavi u novoj temi.

Postoji neka NMFTP komponenta u okviru (Net Masters komponenti), a takodje postoji i IdFTP u okviru
Indy seta. Nisam ih nikada koristio, ali pretpostavljam da je potrebno samo podesavati propertije.

P.S.

Vezano za DLL-ove. Obavezno skini:
http://www.frasersoft.net/program/bcbdev.zip
i u sekciji (ako se dobro sećam) Articles imaš jedan od boljih tutorijala vezanih za DLLove i sve
probleme na koje možeš naići pri portovanju MS/Borland DLL-ova.
Re: Par pitaja vezano za builder... 16.06.2007. u 00:35 · pre 235 meseci #4
Sve je ovo super i ok ali sto se tice dll-ova nesto mi nije jasno

Napravio sam klasu (npr nek se zove TTest) koja moze da ima samo jednu instancu, tj singleton
Code:
  
class TTest{
private:
       static TTest *instance;
       TTest();   
       ...
public:
       TTest * getInstance();
       ...
};


Code:

TTest *TTest::instance = NULL;

TTest *TTest:: getInstance(){
       if(!instance)
              instance = new TTest();
       return instance;
}


sad sledi pitanje ako vec POSTOJI instanca klase TTest zasto kada pozivam iz DLLa getInstance() i prolazim kroz kod vidim da je vrednost instance jednaka NULL
Potpis
http://www.knjigaimena.com
Re: Par pitaja vezano za builder... 16.06.2007. u 11:11 · pre 235 meseci #5
Najbolje pokaži ceo kod (izbaci sve suvišno), pa da vidimo čemu je reč, ovako je sve nagađanje.

Dakle, onaj DLL header fajl bi trebao da budeo otprilike ovako
(mislim da si zaboravio da staviš i static na getInstance() ):
Code:

#ifndef DllH
#define DllH

  #ifdef BUILDING_DLL
    #define MY_FUNC __declspec(dllexport)
  #else
    #define MY_FUNC __declspec(dllimport)
  #endif

  #ifdef __cplusplus
    extern "C" {
  #endif

  class MY_FUNC TTest
  {
       public:
       static TTest *instance;
       static TTest * getInstance();
       // ...
  };

  #ifdef __cplusplus
    }
  #endif

#endif


DLL Source:
Code:

TTest *TTest::instance = NULL;

TTest *TTest::getInstance()
{
   if ( !instance )
      instance = new TTest();
   return instance;
}

int WINAPI DllEntryPoint( HINSTANCE hinst, unsigned long reason, void *lpReserved )
{
   TTest *test;
   test = TTest::getInstance();
   return TRUE;
}


Ovde bi valajlo i DLL_PROCESS_ATTACH, DLL_PROCESS_DETACH, ali to je već neka druga priča.

A na strani Form1:

Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   ShowMessage( (long)(TTest::instance) );
}

Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme