Re: Linking error in mixed code
* swtbase@gmail.com:
Hi all,
I have a .NET application which needs to use some Win APIs. I set the
linker option (of VC++ .NET 2008 Express) to '\clr' to use mixed code
and added the following line of code:
...
#pragma unmanaged
namespace UnManagedFuncs
{
using namespace System::Runtime::InteropServices;
[DllImport("user32", EntryPoint = "SetClipboardViewer", CharSet =
CharSet::Unicode)]
extern "C" long __cdecl SetClipboardViewer(void* hWnd);
[DllImport("user32", EntryPoint = "SetWindowLong", CharSet =
CharSet::Unicode)]
extern "C" long __cdecl SetWindowLongW(void* hWnd, int nIndex, long
dwNewLong);
[DllImport("user32", EntryPoint = "CallWindowProc", CharSet =
CharSet::Unicode)]
extern "C" long __cdecl CallWindowProcW(long* lpPrevWndFunc, void*
hWnd, unsigned int uMsg, unsigned int wParam, long lParam );
...
}
#pragma managed
namespace MyApp
{
...
private: System::Void frmMain_Load(System::Object^
sender, System::EventArgs^ e)
{
// Register this window to receive 'clipboard contents
changed' event
UnManagedFuncs::SetClipboardViewer((void*)this->Handle);
UnManagedFuncs::HookWindow((void*)this-
Handle);
}
}
I get the following linker errors:
ScratchBook.obj : error LNK2019: unresolved external symbol
_CallWindowProcW referenced in function _UnManagedWinProc
ScratchBook.obj : error LNK2019: unresolved external symbol
_SetWindowLongW referenced in function "void __cdecl
UnManagedFuncs::HookWindow(void *)" (?
HookWindow@UnManagedFuncs@@YAXPAX@Z)
What is wrong?
I dont't have MSVC with C++/CLI, but just on the off-chance that it works, try
"__stdcall" instead of "__cdecl" (I don't know whether the language provides
that keyword, but probably it does).
First, it just seems more correct, since those API functions are stdcall.
Second, it may be that "__cdecl" adds an underscore at the start of the name.
However, are you sure that you really need to use that DllImport mechanism?
Since I haven't used C++/CLI I can't say for sure, but I had the impression that
you could use the Windows API directly.
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?