C \ # 노트, C \ # C 와 의 상호작용, 비 위탁 관리 코드

c \ # 시작 설정 windows 프로그램 시작 설정 레 지 스 트 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 경로 에 키 값 이 시작 경 로 를 가리 키 는 것 을 추가 합 니 다.
주석 해석
/****************************************************************************
 * @fn           EnumDevices
 * @brief               
 * @param        nLayerType       IN              :1-GigE; 4-USB;   
 * @param        stDeviceList     OUT            
 * @return         :0;  :   
 ****************************************************************************/

순서대로
  • 방법 명
  • 방법 개술
  • 매개 변수 입력 (전달 이 사용 되 었 으 니 상관 하지 마 세 요)
  • 매개 변수 출력 (적재 처리 의 중간 결과, 일부 결 과 는 되 돌아 오지 않 음)
  • 돌아 가기
  • c \ # ref 수정자
    매개 변 수 는 방법의 매개 변수 목록 에서 ref 키 워드 를 사용 할 때 매개 변 수 를 값 에 따라 전달 하 는 것 이 아니 라 참조 에 따라 전달 하 는 것 을 표시 합 니 다.ref 키 워드 는 형 삼 을 실제 인삼 의 별명 으로 만 듭 니 다. 이것 은 반드시 변수 여야 합 니 다.다시 말 하면 형 삼 에 대한 모든 조작 은 실 삼 에 대한 것 이다.ref 인 자 를 사용 하려 면 방법 정의 와 호출 방법 은 모두 ref 키 워드 를 사용 하여 ref 또는 in 형 삼 에 전달 하 는 실제 인삼 을 초기 화 한 다음 에 전달 해 야 합 니 다.
    //   
    float fExposure = 0;
    nRet = m_pcCameraOperator.GetFloatValue("ExposureTime", ref fExposure);
    //   
    public int GetFloatValue(string strKey, ref float pfValue){...}
    
    //   ,      
    public int SaveImage(ref CMvSmartSDK.MVSC_IMG_CONVERT_PARAM pstImageConvertParam){...}
    
    //       
     public struct MVSC_IMG_CONVERT_PARAM{...}
    

    Marshalas 속성 및 사용
    Marshalas 속성 은 위탁 관리 코드 와 비 위탁 관리 코드 사이 에 데 이 터 를 어떻게 봉 하 는 지 알려 줍 니 다.Marshalas 속성 및 사용
    public struct MV_SC_DEVICE_INFO_LIST
    {
        public UInt32 nDeviceNum;
        
        // 
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = MV_SC_MAX_DEVICE_NUM)]
        public MV_SC_DEVICE_INFO[] astDeviceInfo;
    };
    

    Unmanaged Type 데이터 형식 은 매개 변수 나 필드 를 비 위탁 관리 코드 로 보 내 는 방법 을 지정 합 니 다.
    위탁 관리 코드 와 비 위탁 관리 코드 는. net 프레임 워 크 를 기반 으로 하 는 코드 입 니 다. 프레임 워 크 가 있 으 면 메모리 자원 관리 비 위탁 관리 코드 는 프레임 워 크 에 의 해 제어 되 지 않 는 코드 입 니 다. 예 를 들 어 dll 의 c 코드 와 같 습 니 다.
    키워드
    Thread 형식 C \ # 에서 스 레 드 관리
    Intr 형식 인 스 턴 스 의 Intr 에 서 는 System. IO. FileStream 류 를 사용 하여 저 장 된 파일 핸들 을 광범 위 하 게 사용 합 니 다.
    C \ # C 언어의 API 를 호출 할 때 보통 void * 포인 터 를 IntPtr C \ # 포인 터 를 소개 대상 변환 코드 로 변환 합 니 다.
    위탁 관리 대상 에서 비 위탁 관리 메모리 블록 으로 데 이 터 를 편성 하 는 방법 (역방향 조작 Marshal. PtrToStructure) Marshal. structureToPtr marshal. structuretoptr 는 비 위탁 관리 메모리 를 위탁 관리 메모리 Marshal. PtrToStructure 위탁 관리 메모리 변화 분석 에 저장 합 니 다.
  • 인 스 턴 스 대상 이 300 M 메모 리 를 차지 합 니 다 (실제 사용 할 때 만 자동 으로 메모 리 를 신청 합 니 다)
  • 대상 은 비 위탁 관리 코드 로 전달 되 고 실제 적 으로 전체 복사 이 며 이때 메모리 가 600 M
  • 을 차지한다.
  • 새로운 대상 (이 대상 의 구 조 를 정의 해 야 함) anotherP = (Point)Marshal.PtrToStructure(pnt, typeof(Point)); 을 되 돌려 주 고 위탁 관리 코드 가 아 닌 대상 을 모두 복사 합 니 다. 이때 메모리 가 900 M
  • 을 차지 합 니 다.
    홈 페이지 소스 코드 예시
    using System;
    using System.Runtime.InteropServices;
    using System.Threading;
    
    public struct Point
    {
        public int x;
        public int y;
        public byte[] buffer;
        // byte[] buffer = new byte[MAX_IMAGE_FRAME_SIZE];
    }
        class Example
    {
    
        static void Main()
        {
    
            // Create a point struct.
            Point p;
            p.x = 1;
            p.y = 1;
            Thread.Sleep(3000);
            // 100M
            p.buffer = new byte[1024 * 1024 * 300]; 
    
            Console.WriteLine("The value of first point is " + p.x + " and " + p.y + "." + p.buffer.Length);
            
            Thread.Sleep(1000);
            // Initialize unmanged memory to hold the struct.
            IntPtr pnt = Marshal.AllocHGlobal(Marshal.SizeOf(p));
            Thread.Sleep(1000);
            try
            {
    
                // Copy the struct to unmanaged memory.
                Marshal.StructureToPtr(p, pnt, false);
                Thread.Sleep(1000);
                // Create another point.
                Point anotherP;
    
                // Set this Point to the value of the 
                // Point in unmanaged memory. 
                anotherP = (Point)Marshal.PtrToStructure(pnt, typeof(Point));
                Thread.Sleep(1000);
                Console.WriteLine("The value of new point is " + anotherP.x + " and " + anotherP.y + ".");
                Console.WriteLine(".." + p.buffer.Length);
                Thread.Sleep(1000);
            }
            finally
            {
                // Free the unmanaged memory.
                Marshal.FreeHGlobal(pnt);
            }
        }
    
    }
    

    그래 픽 C \ # 내 장 된 그래 픽 클래스 C \ # 그래 픽 관련

    좋은 웹페이지 즐겨찾기