본문 바로가기

VB.NET

서로다른 exe 모듈간에 데이터를 공유하는 방법

반응형

Framework 4.0 부터 exe 파일간에 메모리 매핑 (MemoryMappedFile) 메소드를 사용해서

필요한 데이터를 공유할수 있다.

 

 

상속상위 계층

System.Object
  System.IO.MemoryMappedFiles.MemoryMappedFile

 

 

MemoryMappedFile 메소드를 이용하여 데이터를 쉽게 공유할수 있다.

물론 타겟이 되는 폼의 New 메소드에 파라메터로 전달하는 방법도 있지만,

MemoryMappedFile 의 경우는 타 exe 파일들간에 데이터 공유도 손쉽게 할수있다는 장점이 있다.

 

사용법은 아래와 같다.

 

<메모리에 쓰는방법>

     ''' <summary>
    ''' 메모리에 쓰는방법
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub MakeMemoryMappedFile(ByVal tar As String, ByVal tarText As String)
        'Dim File = MemoryMappedFile.CreateOrOpen(target, MaxSize)
        Dim File = MemoryMappedFile.CreateOrOpen(target, MaxSize)
       
        Dim bytes = New Byte() {}
        bytes = StrToByteArray(tarText)

        Using writer = File.CreateViewAccessor(0, bytes.Length)

            writer.WriteArray(Of Byte)(0, bytes, 0, bytes.Length)

        End Using

 

    End Sub

 

 

 

<메모리로부터 읽는방법>

 
    ''' <summary>
    ''' 메모리로부터 읽는방법
    ''' </summary>
    ''' <remarks></remarks>
    Private Function ReadMemoryMappedFile(ByVal tarMem As String) As String
        Dim result As String = ""

        Try
            Using file = MemoryMappedFile.OpenExisting(tarMem)
                Using reader = file.CreateViewAccessor(0, MaxSize)

                    Dim bytes = New Byte(MaxSize) {}
                    reader.ReadArray(Of Byte)(0, bytes, 0, bytes.Length)

                    result = System.Text.Encoding.UTF8.GetString(bytes)

                End Using
            End Using

            Return result

            'Catch noFile As FileNotFoundException
            '    MsgBox("Error : " + noFile.Message)
            '    Return result

        Catch Ex As Exception
            Return result
        End Try

    End Function

 

 

<실제 사용예제> 

 

 MakeMemoryMappedFile(키값, 넣을내용)
 

 ReadMemoryMappedFile(키값)

 

 

 

필자는 위의 방법으로 현재 개발중인 exe 모듈 140여개인 SmartClient 솔류션 간의 공통데이터 공유에 적용중이다.

 

물론, 데이터를 암호화해서 암호화된 값을 넣어두고

끌어다쓰는 모듈쪽에서 복호화해서 받아쓰는 방법이 보안상은 좀 더 나을것이다.

반응형