Visual C++ .NET/Development/DllImport
Get the last WIN32 error
<source lang="csharp">
- include "stdafx.h"
- using "System.dll"
using namespace System; using namespace System::ComponentModel; // for Win32Exception using namespace System::Runtime::InteropServices; [DllImport("kernel32.dll", SetLastError=true)] extern bool SetVolumeLabel(String^ lpRootPathName, String^ lpVolumeName); bool TestGetLastWin32Error() {
if (SetVolumeLabel("BAD:\\", "VolumeName")) { System::Console::WriteLine("Success!"); return true; } else { throw gcnew Win32Exception(Marshal::GetLastWin32Error()); } return false;
} int main() {
try { TestGetLastWin32Error(); } catch(Win32Exception^ e) { Console::WriteLine(e->ToString()); }
}
</source>
Static Member Invoke
<source lang="csharp">
- include "stdafx.h"
using namespace System; using namespace System::Runtime::InteropServices; ref class SimpleClass { public:
[DllImport("NativeCode")] static long square(long value); [DllImport("User32", CharSet=CharSet::Auto)] static int MessageBox(int hWnd, String^ text, String^ caption, unsigned int type);
}; int main(array<System::String ^> ^args) {
long a = SimpleClass::square(4); Console::WriteLine(L"The square of 4 is {0}", a); SimpleClass::MessageBox(0, L"Hello World!", L"A Message Box", 0); return 0;
}
</source>
strcpy demo
<source lang="csharp">
- include "stdafx.h"
using namespace System; using namespace System::Text; using namespace System::Runtime::InteropServices; [DllImport("msvcrt", CharSet=CharSet::Ansi)] extern "C" int strcpy([MarshalAs(UnmanagedType::LPStr)] StringBuilder^ dest,
[MarshalAs(UnmanagedType::LPStr)] String^ source);
void main() {
StringBuilder^ dest = gcnew StringBuilder(); String^ source = "Hello"; strcpy(dest, source); Console::WriteLine(dest);
}
</source>