Ik gebruik de Approximate Nearest Neighbor Library, welke ik compileer naar een DLL. Deze voeg ik in Visual Studio 2005 toe aan mijn project, zodat ik de functies daarin kan gebruiken.
Eén van de constructors die ik aanroep kan een fout opwerpen, wat prima is. Dan wordt de functie annError aangeroepen, die er zo uit ziet:
En daar gaat het mis. Er staat een exit(1) in als het ANNerr level gelijk is aan ANNabort. Dat gebeurd als er een fout optreed in de constructor, waardoor dus mijn volledige programma er mee stopt.
Dat laatste is onwenselijk, ik wil dan gewoon een foutmelding krijgen. Nu kan ik deze functie aanpassen en de DLL opnieuw compileren, want ik heb de beschikking over de broncode. Maar is er ook een andere mogelijkheid, zodat ik mijn code ook kan geven aan mensen die zelf al beschikken over die DLL?
Ik heb dingen gevonden over het overriden van functies in een DLL, maar ik krijg dit niet aan de praat. De compiler gaat dan zeuren dat er een redefinition van annError is.
Heeft iemand tips of suggesties wat ik kan proberen?
Eén van de constructors die ik aanroep kan een fout opwerpen, wat prima is. Dan wordt de functie annError aangeroepen, die er zo uit ziet:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| enum ANNerr {ANNwarn = 0, ANNabort = 1}; //---------------------------------------------------------------------- // Error handler //---------------------------------------------------------------------- void annError(const char* msg, ANNerr level) { if (level == ANNabort) { cerr << "ANN: ERROR------->" << msg << "<-------------ERROR\n"; exit(1); } else { cerr << "ANN: WARNING----->" << msg << "<-------------WARNING\n"; } } |
En daar gaat het mis. Er staat een exit(1) in als het ANNerr level gelijk is aan ANNabort. Dat gebeurd als er een fout optreed in de constructor, waardoor dus mijn volledige programma er mee stopt.
Dat laatste is onwenselijk, ik wil dan gewoon een foutmelding krijgen. Nu kan ik deze functie aanpassen en de DLL opnieuw compileren, want ik heb de beschikking over de broncode. Maar is er ook een andere mogelijkheid, zodat ik mijn code ook kan geven aan mensen die zelf al beschikken over die DLL?
Ik heb dingen gevonden over het overriden van functies in een DLL, maar ik krijg dit niet aan de praat. De compiler gaat dan zeuren dat er een redefinition van annError is.
Heeft iemand tips of suggesties wat ik kan proberen?