Avatar billede virtualfriend Nybegynder
11. december 2001 - 00:20 Der er 3 kommentarer og
1 løsning

DLL-Hvordan??


Hej!

Er der nogen her der ved hvordan man får adgang til sine tabeller i sin interbase fra en dll fil??
Jeg har et datamodul som jeg inckludere i mit dll projekt på samme måde som jeg gør det i min applikation som kalder min dll fil.

Jeg kan få adgang til mine tabeller i min applikation,men ikke fra min dll fil.

Så hvis der findes en som ved noget om dll filer, vil jeg blive glad for et svar..

MVH
Avatar billede soepro Nybegynder
11. december 2001 - 14:48 #1
Hvordan \"kan ikke få adgang\" ??? Når du laver en applikation, laves automatisk en masse opstartstjavs, som bl.a. opretter dit datamodul og åbner de filer du evt. har haft åbne på design tidspunktet.

I en aller ander .cpp i dit DLL skal der stå \"TDataModul1 DataModul1;\" eller hvad du nu har kaldt det, for at modulet overhovedet er instansieret, og dermed kan bruges. Du kan evt. i din DLL checke at det er sket, ved simpelthen at checke værdien af DataModul1:

if (DataModul1 == null)
  DataModul1 = new TDataModul1(this);

Prøv evt. at indsætte et breakpoint i constructoren til datamodulet, for at se om den overhovedet udføres.
Avatar billede virtualfriend Nybegynder
12. december 2001 - 01:44 #2

Den her kode fungerer fint i min applikation, men ikke her i DLL filen.

void MyClass::getPassager(HWND hWnd,string bil)
{

 


  DataMod->LufthavnDB->Open();
  DataMod->Query1->SQL->Clear();


DataMod->Query1->SQL->Add(\"select navn,adresse,postnr from Passager where bilnr = :BIL \");
DataMod->Query1->ParamByName(\"BIL\")->AsString=bil.c_str();

DataMod->Query1->Open();
DataMod->Query1->First();


navn=DataMod->Query1->FieldByName(\"navn\")->AsString.c_str();
adresse=DataMod->Query1->FieldByName(\"adresse\")->AsString.c_str();
postnr=DataMod->Query1->FieldByName(\"postnr\")->AsString.c_str();



}
Avatar billede soepro Nybegynder
13. december 2001 - 11:45 #3
Yeps, men det er fordi at Datamodulet er initialiseret i din WinMain (se .cpp\'en med samme navn som dit projekt.)

Hvis du skal have d.o. til at virke i en DLL, skal du tilføje følgende:

void MyClass::getPassager(HWND hWnd, string bil)
{
  // Instancier datamodul, hvis det ikke allerede er gjort.
  if (DataMod == NULL)
    DataMod = new TDataMod(NULL);

  // Så kan vi bruge data-modulet.
  DataMod->LufthavnDB->Open();
  : osv.
}

Idet jeg antager at DataMod .cpp har en erklæring af DataMod variablen i toppen, hvorved den er GLOBAL indenfor DLL\'en. Normalt vil man jo lave new med (this) som pointer, men DLL\'en kender jo ikke hovedprogrammets form i denne her situation, så enten skal du lade den være \"stand-alone\" (via NULL) eller også skal du overføre pointeren til formen som parameter i DLL\'kaldet:

void MyClass::getPassenger(TObject *form, HWND hWnd, string bil)
{
}
Avatar billede virtualfriend Nybegynder
17. februar 2002 - 01:31 #4
gggggggggggggg
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester