PDA

View Full Version : use libs under qt4



raphaelf
26th February 2006, 13:43
Hi everybody,

NOW:
OS:WINXP PRO
QT: 4.1.1
Compiler: MINGW 4.1

Bevor:
OS: WINXP
QT: 3.3.4
Compiler: .NET

I have programed in the past a small program that use a dll, h, lib (original from device)
I have not compiled this, its original delivered.

The program works fine on qt3 but not in qt4. If i include this header file i get erros:


#ifdef __cplusplus
extern "C" {
#endif

#define FUNCTION __declspec(dllimport)

FUNCTION long __stdcall OpenDevice(long CardAddress);
FUNCTION __stdcall CloseDevice();
FUNCTION long __stdcall ReadAnalogChannel(long Channel);
FUNCTION __stdcall ReadAllAnalog(long *Data1, long *Data2);
FUNCTION __stdcall OutputAnalogChannel(long Channel, long Data);
FUNCTION __stdcall OutputAllAnalog(long Data1, long Data2);
FUNCTION __stdcall ClearAnalogChannel(long Channel);
FUNCTION __stdcall ClearAllAnalog();
FUNCTION __stdcall SetAnalogChannel(long Channel);
FUNCTION __stdcall SetAllAnalog();
FUNCTION __stdcall WriteAllDigital(long Data);
FUNCTION __stdcall ClearDigitalChannel(long Channel);
FUNCTION __stdcall ClearAllDigital();
FUNCTION __stdcall SetDigitalChannel(long Channel);
FUNCTION __stdcall SetAllDigital();
FUNCTION bool __stdcall ReadDigitalChannel(long Channel);
FUNCTION long __stdcall ReadAllDigital();
FUNCTION long __stdcall ReadCounter(long CounterNr);
FUNCTION __stdcall ResetCounter(long CounterNr);
FUNCTION __stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime);

#ifdef __cplusplus
}
#endif





error:


In file included from test2.cpp:1:
test2.h:22:7: warning: no newline at end of file
In file included from test2.cpp:2:
K8055d.h:8: error: expected constructor, destructor, or type conversion before '
;' token
K8055d.h:10: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:11: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:12: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:13: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:14: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:15: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:16: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:17: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:18: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:19: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:20: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:21: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:25: error: expected constructor, destructor, or type conversion before
';' token
K8055d.h:26: error: expected constructor, destructor, or type conversion before
';' token
test2.cpp:26:2: warning: no newline at end of file
mingw32-make[1]: *** [tmp\obj\release_shared\test2.o] Error 1
mingw32-make[1]: Leaving directory `D:/apps/Qt/4.1.1/test2'
mingw32-make: *** [release] Error 2

I have included the libs like in qt3 .pro file:


win32:LIBS += K8055D_C.lib


So i use the same filosofie to program it in qt4, but why qt4 have a problem with this header file?

orb9
26th February 2006, 16:50
Hi everybody,
NOW:
Compiler: MINGW 4.1

Bevor:
Compiler: .NET

IMHO this is not a problem from the differences between Qt3 and Qt4, but rather with the different compilers. Obviously MINGW does not understand the code in the header file.

Just a shot in the dark: Try removing the stdcall stuff.

raphaelf
26th February 2006, 16:57
Hi,
You think:

FUNCTION CloseDevice();

instead of:


FUNCTION __stdcall CloseDevice();


It not works :(

But __stdcall is not supported by mingw i think, because if i edit the header file to:


#ifdef __cplusplus
extern "C" {
#endif

#define FUNCTION __declspec(dllimport)

FUNCTION long __stdcall OpenDevice(long CardAddress);


#ifdef __cplusplus
}
#endif


I can use this function "OpenDevice" without problem.

What should i do?

raphaelf
27th February 2006, 15:44
have nobody a idea how to use my header file? I have there a problem with stdcall i think :o

jacek
27th February 2006, 16:39
FUNCTION __stdcall CloseDevice();
FUNCTION __stdcall ReadAllAnalog(long *Data1, long *Data2);
FUNCTION __stdcall OutputAnalogChannel(long Channel, long Data);
FUNCTION __stdcall OutputAllAnalog(long Data1, long Data2);
FUNCTION __stdcall ClearAnalogChannel(long Channel);
FUNCTION __stdcall ClearAllAnalog();
FUNCTION __stdcall SetAnalogChannel(long Channel);
FUNCTION __stdcall SetAllAnalog();
FUNCTION __stdcall WriteAllDigital(long Data);
FUNCTION __stdcall ClearDigitalChannel(long Channel);
FUNCTION __stdcall ClearAllDigital();
FUNCTION __stdcall SetDigitalChannel(long Channel);
FUNCTION __stdcall SetAllDigital();
FUNCTION __stdcall ResetCounter(long CounterNr);
FUNCTION __stdcall SetCounterDebounceTime(long CounterNr, long DebounceTime;
All of those functions are missing the return value type. Did you try to add "void" between "FUNCTION" and "__stdcall"?

raphaelf
27th February 2006, 18:27
Hi Jacek!!

Thank you very much ;) it works..How did you find that out?

jacek
27th February 2006, 18:59
How did you find that out?
You wrote that "FUNCTION long __stdcall OpenDevice(long CardAddress);" works, so I focused on the differences between this and other declarations.