Code sample Home

Save and load a drawing using memory buffer

// global memory buffer
BYTE* gpMem = NULL;

// Save a drawing into memory buffer
//-----------------------------------------------
BOOL SaveToMem (HANDLE hLcDrw)
{
  int MemSize;

  if (gpMem != NULL){
    // the buffer is not empty, clear it
    delete[] gpMem;
    gpMem = NULL;
  }
  // get size required for memory buffer
  MemSize = lcDrwSaveMem( hLcDrw, 0, 0 );
  if (MemSize > 0){
    // allocate memory buffer
    gpMem = new BYTE[MemSize];
    // write a drawing database into the memory buffer
    lcDrwSaveMem( hLcDrw, (HANDLE)gpMem, MemSize );
    return TRUE;
  }
  return FALSE;
}

// Load a drawing from memory buffer
// If you don't need to display the loaded drawing, then specify 0 for hLcWnd
//-----------------------------------------------
BOOL LoadFromMem (HANDLE hLcDrw, HANDLE hLcWnd, BOOL bClearMem)
{
  BOOL bRet = FALSE;
  if (gpMem != NULL){
    bRet = lcDrwLoadMem( hLcDrw, (HANDLE)gpMem, hLcWnd );
    // clear memory buffer (if don't needed any more)
    if (bClearMem == TRUE){
      delete[] gpMem;
      gpMem = NULL;
    }
  }
  return bRet;
}



VisualBasic.NET
Imports System
Imports System.Runtime.InteropServices

Public Class Form1
  ...
  Dim hLcWnd As Integer, hLcDrw As Integer
  Dim MemBuf As IntPtr   ' pointer to a memory buffer
  ...
  
  -----------------------------------------------
  Private Sub SaveToMemoryToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveToMemoryToolStripMenuItem.Click
    Dim MemSize As Integer, bRet As Boolean
    ' get required size for memory buffer
    MemSize = Lcad.DrwSaveMem(hLcDrw, 0, 0)
    If MemSize > 0 Then
      ' alloc memory buffer
      MemBuf = Marshal.AllocHGlobal(MemSize)
      ' write drawing into the buffer
      bRet = Lcad.DrwSaveMem(hLcDrw, MemBuf, MemSize)
    End If
  End Sub
  
  -----------------------------------------------
  Private Sub LoadFromMemoryToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LoadFromMemoryToolStripMenuItem.Click
    Dim bRet As Boolean
    If MemBuf <> 0 Then
      bRet = Lcad.DrwLoadMem(hLcDrw, MemBuf, hLcWnd)
      ' free memory buffer
      Marshal.FreeHGlobal(MemBuf)
      MemBuf = 0
    End If
  End Sub
End Class