 <p>You probably want to have something like</p> <pre><code>void Test2(void(*Func)(wchar_t*, wchar_t*),wchar_t* x, wchar_t* y) { (*Func)(x,y); } int main() { Test2(Test,L"Hello", L"Testing"); return 0; } </code></pre> <p>instead.</p> <hr> <p>As for your comment</p> <blockquote> <p>How do i do this in C++ with templates?</p> </blockquote> <p>I could think of</p> <pre><code>template&lt;typename Param&gt; void Test2(void(*Func)(Param, Param), Param x, Param y) { (*Func)(x,y); } void Test(wchar_t* a, wchar_t* b); int main() { Test2(Test,L"Hello", L"Testing"); return 0; } </code></pre> <p>This should just work fine.</p>