I’m new to Windows desktop programming (or at least I haven’t done it since, um, Windows 3.0). I’ve got VS 2012 Express for Desktop installed. I have a default forms-based project created and running. Now I’d like to add in a Windows API with the following lines per pinvoke.net:
[DllImport("user32.dll")]
static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags);
I’m getting two errors for this code:
- The modifier ‘extern’ is not valid for this item (on the closing square bracket of the attribute)
- Expected class, delegate, enum, interface, or struct (on
bool)
What am I doing wrong?
Make sure you’re placing this declaration within a class definition, not outside it.
Typically, you’d keep P/Invokes within a static class called
NativeMethods, which you then invoke using a call likeNativeMethods.SetLayeredWindowedAttributes(...). For example:If you want to call it without a type reference, then you need to put it in the same class as you’re calling it in, but unless you’re sure you won’t use this P/Invoke anywhere else, I wouldn’t recommend it.