Visual C++ .NET/Development/DllImport

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Get the last WIN32 error

<source lang="csharp">

  1. include "stdafx.h"
  2. 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">

  1. 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">

  1. 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>