게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
RtlMoveMemory API 관련 64비트에서 오류(vb) 도와주세요
게시물ID : programmer_12528짧은주소 복사하기
작성자 : sharing
추천 : 0
조회수 : 580회
댓글수 : 5개
등록시간 : 2015/08/03 18:56:21
옵션
  • 본인삭제금지
선언부
 
    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바이트밖에 복사가 안되는건지 혹시 잘 아시는 분 있을까요?
 
 
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호