[DllImport ("user32.dll")] static extern bool MessageBeep (System.UInt32 type);
/* ... ... */ #pragma unmanaged /* ... ++ ... */ #pragma managed /* ... ... */
#pragma unmanaged
block. Or build a library into one large .c file (translation unit) - as in SQLite amalgamation . #using <System.dll> #using "..\MyLocalAssembly.dll">
using namespace System::Collections::Generic;
public value class Vector { public: int X; int Y; Vector (int x, int y) : X (x), Y (y) {} };
public ref class Resource { public: void PublicMethod () { ... } property int SomeProperty { int get () { return ... } void set (int value) { ... } }; };
public interface class IApplicationListener { void OnStart (); void OnWait (); void OnEnd (); };
public enum struct RenderMode { Normal = FT_RENDER_MODE_NORMAL, Light = FT_RENDER_MODE_LIGHT, Mono = FT_RENDER_MODE_MONO, LCD = FT_RENDER_MODE_LCD };
/* GC-, nullptr — null C# */ System::String ^ string = nullptr; /* , gcnew — new C#, */ throw gcnew System::Exception (L" ");
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* array<T> — CLR-, T[] C# */ }
public ref class Tessellator : System::IDisposable { internal: // Unmanaged::Tessellator * tess; public: Tessellator (int numSteps) { tess = new Unmanaged::Tessellator (numSteps); } ~Tessellator () // IDisposable::Dispose () { delete tess; } };
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
pin_ptr. std::auto_ptr ( , ). pin_ptr , GC- .
generic<typename T> where T : value class Buffer ^ CreateVertexBuffer (array<T> ^ elements) { /* */ pin_ptr<T> p = &(elements[0]); /* , * */ void * address = p; }
System::String wide char (wchar_t *):
#include <vcclr.h> System::String ^ path = ... /* "" String */ pin_ptr<const wchar_t> pathChars = PtrToStringChars (path);
System::String ANSI C (RAII-):
struct StringToANSI { private: const char * p; public: StringToANSI (String ^ s) : p ((const char*) ((Marshal::StringToHGlobalAnsi (s)).ToPointer ())) { } ~StringToANSI() { Marshal::FreeHGlobal (IntPtr ((void *) p)); } operator const char * () { return p; } };
ANSI- System::String:
const char * ptr = "ANSI string"; System::String ^ str = gcnew System::String (ptr);
GC- unmanaged-
- . . C++/CLI . , gcroot:
#include <msclr/auto_gcroot.h> #pragma unmanaged class UnmanagedWindowCounterpart { private: /* */ gcroot<IInputEventListener ^> MouseEventListener; ... };
, . MSDN.
Happy coding!
Source: https://habr.com/ru/post/47732/
All Articles