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:
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.
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:
	 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;
Nemmeno questo va..
viene stampato: printf("Unable to find function DLL\n"+dwfunct);
con errore string::compare...

Sono disperato.. qualcuno mi da qualche dritta?