Ciao a tutti,
sono un programmatore Java e mi trovi mio malgrado a dover velocissimamente fare una cosa in C.
Ora vi espongo il problema che ho trovato.
Per iniziare sto lavorando con Eclipse cpp, g++ e MinGW.
Praticamente il fornitore di un lettore di carte magnetiche mi ha inviato un pacchetto con le API la libreria e i driver per utilizzare il device. QUindi il file .h, la lib e la dll.
Ho creato il progetto su Eclipse e gli ho linkato la libreria in maniera implicita. Il Linker vede la libreria ma continua a dirmi "undefined reference to `IfdClose'" ifClose è la funzione che referenzio.
L'output del compilatore è questo:
Non venendone a capo ho provato a referenziare dinamicamente la dll... la trova ma poi comunque non riesce a chiamare il metodo.. il codice con cui ho effettuato la prova è questo:codice:**** Internal Builder is used for build **** g++ -O0 -g3 -Wall -c -fmessage-length=0 -osrc\TestCardReader.o ..\src\TestCardReader.cpp ..\src\TestCardReader.cpp: In function `int main()': ..\src\TestCardReader.cpp:26: warning: unsigned int format, DWORD arg (arg 3) g++ -LC:\workspace-cpp\TestCardReader\lib -oTestCardReader.exe src\TestCardReader.o -lVenusDrv src\TestCardReader.o: In function `main': C:/workspace-cpp/TestCardReader/Debug/../src/TestCardReader.cpp:21: undefined reference to `IfdOpen' C:/workspace-cpp/TestCardReader/Debug/../src/TestCardReader.cpp:31: undefined reference to `IfdClose' collect2: ld returned 1 exit status Build error occurred, build is stopped Time consumed: 907 ms.
Nemmeno questo va..codice:HINSTANCE lpsolve; typedef HANDLE (*FNVENUSOPEN)(char*); FNVENUSOPEN MyFunc1; LPCSTR string; string = "IfdOpen"; lpsolve = LoadLibrary("VenusDrv.dll"); if (lpsolve == NULL) { printf("Unable to load lpsolve shared library\n"); return(FALSE); } printf(string); MyFunc1 = (FNVENUSOPEN) GetProcAddress(lpsolve, string); DWORD dwfunct = GetLastError(); if (!MyFunc1) { // handle the error FreeLibrary(lpsolve); printf("Unable to find function DLL\n"+dwfunct); return 0; } else { hIfd = MyFunc1("COM1"); if (hIfd == NULL) { char szBuf[200]; DWORD dw = GetLastError(); sprintf(szBuf, "IfdOpen failed: GetLastError returned %u\n", dw); MessageBox(NULL, szBuf, "ERROR", MB_OK | MB_ICONSTOP); ExitProcess(dw); } } return 0;
viene stampato: printf("Unable to find function DLL\n"+dwfunct);
con errore string::compare...
Sono disperato.. qualcuno mi da qualche dritta?

Rispondi quotando