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
You must change the parameter in your thread function to LPVOID.