Visual C++ .NET/Development/DllImport
Get the last WIN32 error
#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());
}
}
Static Member Invoke
#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;
}
strcpy demo
#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);
}