David Wilkinson schrieb:
??? wrote:
But these functions (bootServer & initServer) are declared in a
header file which I included.
Declared, yes. Declarations have to do with compiling. Your code is
compiling correctly.
You are seeing linker errors, which means that the missing functions
are not defined in any of the compiled translation units. You are
missing an implementation file (.cpp) or library (.lib) file in your
project.
Hey thank you,
I think that was the problem.
But now I've got a new problem. This is the output.
--------------------------
..\serverwin32.cpp(41) : error C2664: 'CreateThread' : cannot convert
parameter 3 from 'DWORD (__stdcall *)(dpws *)' to
'LPTHREAD_START_ROUTINE'
None of the functions with this name in scope match the target
type
..\serverwin32.cpp(65) : error C2440: '=' : cannot convert from
'LPVOID' to 'dpws *'
Conversion from 'void*' to pointer to non-'void' requires an
explicit cast
..\serverwin32.cpp(75) : error C2664: 'CreateThread' : cannot convert
parameter 3 from 'DWORD (__stdcall *)(dpws *)' to
'LPTHREAD_START_ROUTINE'
None of the functions with this name in scope match the target
type
--------------------------
The code in which these functions appear is:
--------------------------
HANDLE bootThread = NULL;
static DWORD WINAPI runServer(struct dpws *);
static DWORD WINAPI serve(struct dpws *);
int initServer(struct dpws *dpws)
{
int status = dpws_server_init(dpws, NULL);
if (status)
fprintf(stderr, dpws_get_error_msg(dpws));
return status;
}
int bootServer(struct dpws *dpws)
{
bootThread = CreateThread(NULL, 0, runServer, dpws, 0, NULL);
if (bootThread == NULL) {
fprintf (stderr, "Thread Creation ERROR (%d) - bootServer()\n",
GetLastError());
return -1;
}
return 0;
}
void stopServer()
{
dpws_stop_server(1000);
// wait for the master thread to exit
WaitForSingleObject(bootThread, 2000);
CloseHandle(bootThread);
}
static DWORD WINAPI runServer(struct dpws * m_dpws)
{
HANDLE hThread;
struct dpws * s_dpws;
int status = DPWS_OK;
while (TRUE) {
/* Allocate a DPWS runtime structure for the next serve task */
s_dpws = HeapAlloc(GetProcessHeap(), 0, sizeof(struct dpws));
status = dpws_accept_thr(m_dpws, s_dpws);
if (status) {
if (status != DPWS_ERR_SERVER_STOPPED)
fprintf(stderr, dpws_get_error_msg(m_dpws));
goto exit;
}
/* spawn a new thread */ // NOTE: implement a pool instead
hThread = CreateThread(NULL, 0, serve, s_dpws, 0, NULL);
if (hThread == NULL) {
fprintf (stderr, "Thread Creation ERROR (%d) - runServer()\n",
status);
goto exit;
}
else
CloseHandle(hThread);
}
exit:
// dpws_shutdown() is performed by the DLL
return 0;
}
static DWORD WINAPI serve(struct dpws * dpws)
{
dpws_serve(dpws);
dpws_end(dpws);
HeapFree(GetProcessHeap(), 0, dpws);
return 0;
}
--------------------------
How can I fix it?
Thanks. Sven