B
brianhray
Hello:
I am writing a C interface and was curious how/why a void* can be used
as a reference parameter.
////////////////////////////////////////////////////////////
// WORKS:
// Client1.h
void ExternedSetDoFromCallback(void* (*DoGetFromCallback)());
// Client1.cpp
void* (*ptDoGetFromCallback)() = NULL;
void
ExternedSetDoFromCallback(void* (*DoGetFromCallback)())
{
ptDoGetFromCallback = DoGetFromCallback;
}
void *
DoGetFromCallback()
{
if (ptDoGetFromCallback)
return ptDoGetFromCallback();
return NULL;
}
// Worker1.cpp
void* DoSomethingStatic()
{
return (void *) DoSomething();
}
// Init()
ExternedSetDoFromCallback(DoSomethingStatic);
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// DOES NOT WORK:
// Client1.h
void ExternedSetDoFromCallback(void (*DoGetFromCallback)(void*));
// Client1.cpp
void (*ptDoGetFromCallback)(void*) = NULL;
void
ExternedSetDoFromCallback(void (*DoGetFromCallback)(void*))
{
ptDoGetFromCallback = DoGetFromCallback;
}
void
DoGetFromCallback(void* something)
{
if (ptDoGetFromCallback)
ptDoGetFromCallback(something);
}
// Worker1.cpp
void DoSomethingStatic(void* something)
{
something = DoSomething();
}
// Init()
ExternedSetDoFromCallback(DoSomethingStatic);
////////////////////////////////////////////////////////////
Any explanation or suggestions?
-- Brian Ray (http://kazavoo.com)
I am writing a C interface and was curious how/why a void* can be used
as a reference parameter.
////////////////////////////////////////////////////////////
// WORKS:
// Client1.h
void ExternedSetDoFromCallback(void* (*DoGetFromCallback)());
// Client1.cpp
void* (*ptDoGetFromCallback)() = NULL;
void
ExternedSetDoFromCallback(void* (*DoGetFromCallback)())
{
ptDoGetFromCallback = DoGetFromCallback;
}
void *
DoGetFromCallback()
{
if (ptDoGetFromCallback)
return ptDoGetFromCallback();
return NULL;
}
// Worker1.cpp
void* DoSomethingStatic()
{
return (void *) DoSomething();
}
// Init()
ExternedSetDoFromCallback(DoSomethingStatic);
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// DOES NOT WORK:
// Client1.h
void ExternedSetDoFromCallback(void (*DoGetFromCallback)(void*));
// Client1.cpp
void (*ptDoGetFromCallback)(void*) = NULL;
void
ExternedSetDoFromCallback(void (*DoGetFromCallback)(void*))
{
ptDoGetFromCallback = DoGetFromCallback;
}
void
DoGetFromCallback(void* something)
{
if (ptDoGetFromCallback)
ptDoGetFromCallback(something);
}
// Worker1.cpp
void DoSomethingStatic(void* something)
{
something = DoSomething();
}
// Init()
ExternedSetDoFromCallback(DoSomethingStatic);
////////////////////////////////////////////////////////////
Any explanation or suggestions?
-- Brian Ray (http://kazavoo.com)