선언부
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Byte, ByRef Source As Byte, ByVal Length As Long)
메인폼
Dim pCount As Integer
Dim nReadSize As Integer
Dim btReadbuffer() As Byte = New Byte(10024) {}
Dim btReadData() As Byte
pCount = CInt(_pCount)
MainSocketServer.creat_NetworkStream(pCount)
nReadSize = MainSocketServer.pNetworkStream(pCount).Read(btReadbuffer, 0, 10024)
btReadData = New Byte(nReadSize - 1) {}
CopyMemory(btReadData(0), btReadbuffer(0), nReadSize)
kernel32.dll의 RtlMoveMemory API를 사용하여 해당 함수를 실행하였는데 어플리케이션 예외 오류(디버깅도 안되고 뻗음)가 납니다.
try catch도 안되고 그냥 죽네요. 32비트 시스템에선 잘 돌아가는 프로그램인데 64비트에서만...
nReadSize를 고정상수로 100이하 정도로 주었을떈 오류가 나고 함수가 작동하지만
메모리 전체를 복사하지 못하고 앞의 1바이트만 복사됩니다.
ex> btreadbuffer를 스트링으로 변환시 "ABCDEFG"라면, btReadData에는 "A"만 복사됩니다.
원랜 nReadSize만큼 복사되어야 하는데...
nReadSize가 크면 왜 어플리케이션 오류가 나는지,
작으면 작동은 되는데 왜 1바이트밖에 복사가 안되는건지 혹시 잘 아시는 분 있을까요?