Tworzenie biblioteki DLL

Dyskusje na dowolny temat.

Tworzenie biblioteki DLL

Nowy postprzez mervinjmicky » czwartek, 11 lutego 2010, 13:14

Próbuje stworzyć prostą bibliotekę dll. Listing:
Kod: Zaznacz cały
#include <vcl.h>
#include <windows.h>
#include <ADODB.hpp>
#include <DB.hpp>

#pragma hdrstop

extern "C"__declspec(dllexport) void _PrzeWg(TADOQuery *query);

#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}
//---------------------------------------------------------------------------
AnsiString select(TADOQuery *AdoQuery, AnsiString Query, AnsiString Return)
{
AdoQuery->Close();
AdoQuery->SQL->Clear();
AdoQuery->SQL->Add(Query);
AdoQuery->Open();
if(Return!="") return AdoQuery->FieldByName(Return)->AsString;
else return "";
}

void _PrzeWg(TADOQuery *query)
{
select(query, "select * ...", "Id");
}


I teraz gdy kompiluje z odznaczonym "Built with runtime package" mam błędy:
Kod: Zaznacz cały
Build
  [Linker Error] Unresolved external '__fastcall Db::TDataSet::Close()' referenced from C:\UNIT1.OBJ
  [Linker Error] Unresolved external '__fastcall Adodb::TADOQuery::GetSQL()' referenced from C:\UNIT1.OBJ
  [Linker Error] Unresolved external '__fastcall Db::TDataSet::Open()' referenced from C:\UNIT1.OBJ
  [Linker Error] Unresolved external '__fastcall Db::TDataSet::FieldByName(const System::AnsiString)' referenced from C:\UNIT1.OBJ


Rozumiem, że potrzebuje jeszcze dołączyć jakieś biblioteki tak??
Avatar użytkownika
mervinjmicky
Bladawiec
Bladawiec
 
Posty: 9
Dołączył(a): środa, 27 stycznia 2010, 18:36
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Kubuntu 9.10
Kompilator: C++ Builder 6
Gadu Gadu: 0
    NieznanyNieznana

Re: Tworzenie biblioteki DLL

Nowy postprzez Cyfrowy Baron » piątek, 12 lutego 2010, 10:11

Spróbuj dodać funkcję: CoInitialize(NULL);

Kod: Zaznacz cały
AnsiString select(TADOQuery *AdoQuery, AnsiString Query, AnsiString Return)
{
  HRESULT cInitialize = CoInitialize(NULL);

  switch(cInitialize) 
  { 
   case S_FALSE:
        ShowMessage("Biblioteka jest juz zainicjowana, lub nie można zwolnic domyślnego alokatora."); 
        return; 
   case E_OUTOFMEMORY: 
        ShowMessage"Nie można zainicjować, gdyż przekroczono rozmiar pamięci systemu."); 
        return; 
   case E_INVALIDARG: 
       ShowMessage("Nieprawidłowy argument"); 
       return; 
   case E_UNEXPECTED: 
       ShowMessage(""Wystąpił nieokreślony błąd); 
       return; 
  }

  AdoQuery->Close();
  AdoQuery->SQL->Clear();
  AdoQuery->SQL->Add(Query);
  AdoQuery->Open();

AnsiString Result = "";

if(Return != "") Result = AdoQuery->FieldByName(Return)->AsString;

  CoUninitialize();

return Result;
}


Po użyciu musisz wywołać funkcję CoUninitialize(), wiec musiałem nieco zmodyfikować sposób zwracania wartości przez funkcję, gdyż po użyciu funkcji return nic się już nie wykona, dlatego dodałem zmienną Result. Z else zrezygnowałem, gdyż zmienna Result jest inicjowana wartością "", więc gdy warunek if(Return != "") nie jest spełniony to zwrócona zostanie wartość zainicjowana, więc tym samym else jest zbędne.



Funkcja CoInitialize inicjuje bibliotekę COM. Funkcja CoUninitialize zamyka bibliotekę COM. Trzeba ją zamknąć, by można ją było ponownie zainicjować. Jeżeli nie chcesz jej inicjować przy każdym wywołaniu funkcji select to powinieneś ją zainicjować jakoś globalnie i zamykać dopiero gdy jest już zbędna, ale nie wiem czy to się sprawdzi w przypadku biblioteki DLL.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Tworzenie biblioteki DLL

Nowy postprzez polymorphism » piątek, 12 lutego 2010, 11:58

Cyfrowy Baron napisał(a):Spróbuj dodać funkcję: CoInitialize(NULL); (...)

Ech, Baron, przecież po treści błędu widać, że nie chodzi o inicjalizację biblioteki COM, tylko o problemy z linkowaniem.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Tworzenie biblioteki DLL

Nowy postprzez Cyfrowy Baron » piątek, 12 lutego 2010, 12:10

Właśnie te problemy wynikają z baraku inicjalizacji. Pewnie nigdy nie używałeś środowiska BCB.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Tworzenie biblioteki DLL

Nowy postprzez polymorphism » piątek, 12 lutego 2010, 12:16

:lol: Używałem, i nawet na nim nauczyłem się czytać (ze zrozumieniem) błędy kompilacji i linkowania.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Tworzenie biblioteki DLL

Nowy postprzez Cyfrowy Baron » piątek, 12 lutego 2010, 12:22

Takie dyskusje to możesz sobie uskuteczniać w dziale Dyskusja, a jak nie masz nic do powiedzenia to lepiej milcz. Poczekajmy na odpowiedź mervinjmicky.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Tworzenie biblioteki DLL

Nowy postprzez polymorphism » piątek, 12 lutego 2010, 12:32

a jak nie masz nic do powiedzenia to lepiej milcz

Ok, rozumiem, że ty masz w tej dziedzinie dużo do powiedzenia. Więc powiedz mi, co ma wspólnego systemowa CoInitialize, inicjująca w runtime systemową bibliotekę COM, z lokalną biblioteką VCL i jej metodami, które według linkera nigdzie nie są zdefiniowane?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Tworzenie biblioteki DLL

Nowy postprzez polymorphism » piątek, 12 lutego 2010, 17:47

Cyfrowy Baron napisał(a):Najbardziej prawdopodobne:

Spróbuj dołączyć do programu biblioteki: dbrtl.lib i adortl.lib

(...)

No i co, panie Baron, warto było się wykłócać ze mną? 8-)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Tworzenie biblioteki DLL

Nowy postprzez Cyfrowy Baron » piątek, 12 lutego 2010, 19:59

Ja przynajmniej próbuję znaleźć rozwiązanie. Ty rzucasz tylko kąśliwe uwagi, próbując chyba w ten sposób udowodnić sobie i wszystkim jako to jesteś wielki.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Tworzenie biblioteki DLL

Nowy postprzez polymorphism » piątek, 12 lutego 2010, 21:07

Ty rzucasz tylko kąśliwe uwagi (...)

Kąśliwe uwagi? Co w moim pierwszym poście jest kąśliwe? Zwróciłem Ci jedynie uwagę, że to, o czym piszesz, jest bez sensu w kontekście treści błędu. That's all. Zresztą bez problemu znalazłbym moje posty, które nie są tylko kąśliwymi uwagami.

swoją drogą, jesteś strasznie nieprecyzyjny...

Ja przynajmniej próbuję znaleźć rozwiązanie.

A czy ktoś krytykuje Ciebie za to?

(...) próbując chyba w ten sposób udowodnić sobie i wszystkim jako to jesteś wielki.

No chwileczkę, przecież to Ty mnie zaatakowałeś za, co tu dużo mówić, słuszną uwagę. Jak rozumiem, w imię jedynie słusznej racji, racji Barona, mam nic nie pisać, choć widzę, że są błędy, nieścisłości lub niezrozumienie tematu, tak? Przecież to jest jakiś absurd! Gdybym nie zwrócił Ci uwagi, to mervinjmicky walczyłby z tą nieszczęsną CoInitialize zamiast szukać nazw bibliotek, które powinien dołączyć do projektu.

I nie baw się w psychologa, bo diagnozy stawiasz złe 8-)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Tworzenie biblioteki DLL

Nowy postprzez Cyfrowy Baron » sobota, 13 lutego 2010, 10:00

to mervinjmicky walczyłby z tą nieszczęsną CoInitialize


Nie walczyłby, lecz sprawdził i pewnie okazałoby się, że to nie działa. Zgłosiłby na forum, że nie działa i dostałby kolejną odpowiedź. Poza tym jak zapewne zauważyłeś nie poprzestałem na jednej odpowiedzi i poszukiwałem dalej.

Moje diagnozy są prawidłowe, to Tobie trudno się pogodzić z prawdą o sobie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Tworzenie biblioteki DLL

Nowy postprzez polymorphism » sobota, 13 lutego 2010, 11:15

Nie walczyłby, lecz sprawdził i pewnie okazałoby się, że to nie działa. Zgłosiłby na forum, że nie działa i dostałby kolejną odpowiedź.
No ale nie zmienia to faktu, że jakiś czas zajęłoby mu sprawdzanie Twojej sugestii. A po co marnować czas na bzdury, jeśli można od razu zabrać się za problem w odpowiedni sposób?

Poza tym jak zapewne zauważyłeś nie poprzestałem na jednej odpowiedzi i poszukiwałem dalej.

No tak, ale prawdopodobnie dlatego nie przestałeś, bo po mojej uwadze przemyślałeś całość jeszcze raz - nie byłeś w stanie odpowiedzieć na moje pytanie, co ma inicjalizacja COM do błędów linkera. I po to była moja uwaga, postąpiłeś zgodnie z moimi intencjami ;)

Moje diagnozy są prawidłowe (...)

A skąd ta pewność?

(...) to Tobie trudno się pogodzić z prawdą o sobie.

Zabawne. Wiesz, jakby na to nie patrzeć, prawda, którą próbujesz zarysować, nie jest jakaś straszna. Nie rozumiem dlaczego nie miałbym się z nią pogodzić? :lol: A tak poważnie, jesteś trochę przewrażliwiony na własnym punkcie, stąd ta nerwowość u Ciebie w momencie, gdy ktoś podważa Twoje zdanie. W tym wątku ewidentnie to widać...

Oczywiście jeśli jesteś w stanie dowodami wykazać, że masz rację, nie mam nic przeciwko ;)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Tworzenie biblioteki DLL

Nowy postprzez Cyfrowy Baron » sobota, 13 lutego 2010, 13:53

No tak, ale prawdopodobnie dlatego nie przestałeś, bo po mojej uwadze przemyślałeś całość jeszcze raz


Wiec to Ty mnie zainspirowałeś?! :D
Rzeczywiście! Nie mylę się co do Ciebie, masz bardzo wysokie mniemanie o sobie, aż dziw bierze, że tracisz czas na to forum.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Tworzenie biblioteki DLL

Nowy postprzez polymorphism » sobota, 13 lutego 2010, 14:31

Baron, czytaj ze zrozumieniem, co się do Ciebie pisze. Nie zainspirowałem, tylko zwróciłem Ci uwagę, że błądzisz - na forach to całkowicie normalne. Przebieg wątku pozwala mi sądzić, że moja uwaga poskutkowała. Więc nie jest to kwestia zbyt dużego ego, lecz zwykłej analizy 8-)

Nie mylę się co do Ciebie, masz bardzo wysokie mniemanie o sobie (...)

Heh, i to mówi człowiek, który ma w nicku Baron :lol:

(...) aż dziw bierze, że tracisz czas na to forum.

Następny przykład Twojej niekonsekwencji. Piszesz, że jestem na forum tylko po to, żeby udowadniać światu jaki to ze mnie pr0, a teraz się dziwisz, że w ogóle na tym forum jestem, tracąc czas. Zdecyduj się na jakąś wersję, bo te Twoje diagnozy psychologiczne zmieniają się jak w kalejdoskopie, z postu na post...
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Dyskusje

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość