Visual C++ .NET/Development/DllImport

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

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);
}