Microsoft MVP성태의 닷넷 이야기
MarshalDirectiveException 에 대한 질문입니다. [링크 복사], [링크+제목 복사]
조회: 854
글쓴 사람
남산
홈페이지
첨부 파일
 
.Net Framework 4.6 안전하지 않는 코드 허용 VS2019 입니다.

아래와 같은 코드가 있습니다.

    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public unsafe delegate void av_log_set_callback_callback (void* @p0, int @p1,[MarshalAs((UnmanagedType)48)] string @p2, byte* @p3);
    public unsafe struct av_log_set_callback_callback_func
    {
        public IntPtr Pointer;
        public static implicit operator av_log_set_callback_callback_func(av_log_set_callback_callback func) => new av_log_set_callback_callback_func { Pointer =
        func == null ? IntPtr.Zero : Marshal.GetFunctionPointerForDelegate(func) };
    }
---------------------------------------------
[MarshalAs((UnmanagedType)48)] 은
UnmanagedType.LPUTF8Str) 이 4.6에서 정의 되어있지 않다고 해서 수정한 거구요.

그런데 이것이 Windows10에서는 정상적으로 작동하는데
Windows7 에서는 다음과 같은 에러가 뜹니다.

System.Runtime.InteropServices.MarshalDirectiveException: "Cannot marshal 'parameter #3': Invalid managed/unmanaged type combination (String parameters and return types must be paired with LPStr, LPWStr, LPTStr, BStr, TBStr, VBByRefStr, or AnsiBStr)."
(System.Runtime.InteropServices.MarshalDirectiveException : " '매개 변수 # 3'을 마샬링 할 수 없음 : 관리 / 비 관리 유형 조합이 잘못되었습니다 (문자열 매개 변수 및 반환 유형은 LPStr, LPWStr, LPTStr, BStr, TBStr, VBByRefStr 또는 AnsiBStr과 쌍을 이루어야합니다)." )

[MarshalAs((UnmanagedType)48)] string @p2 이 부분에서 나오는 에러로 추정되는데
이것이 같은 대상 Framework 4.6 를 설치하고 (Windows10에는 4.8까지 설치되어 있음)
Windows10에서는 정상 작동하고 Windows7에서는 에러가 나오는 이런 상황이 왜 나오는 답변 좀 부탁드립니다.
그리고 혹시 에러나오는 부분을 올바르게 변경할 수 있는 방법이 있는지요.

읽어주셔서 감사합니다.





donaricano-btn



[최초 등록일: ]
[최종 수정일: 2/21/2021]


비밀번호

댓글 쓴 사람
 



2021-02-21 05시09분
그러니까 해결하고 싶은 것은 결국 .NET 4.6이 설치된 Windows 7에서 오류가 난다는 게 문제 아닌가요? 사실 그 상황에서 오류가 나는 것은 당연한 것임을 본인도 아실 것입니다.

그리고 .NET 4.8이 설치된 Windows 10에서 정상 동작하는 것은, 원래 정상 동작하지 않아야 할 것 같은데 정상 동작해서 그 부분이 의문이라는 건가요?
정성태

1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5399Wpf개발중10/21/20201422Binding 된 항목의 갱신 시 간헐적 끊어짐 발생 문제. [2]
5397나그네10/15/20201205.net Core 3.1 에서 Entity Framework 와 ADO.NET 선택에 관해 여쭤봅니다. [2]
5396여정욱10/15/20201263CLR heap 관련 질문 2 [2]
5395여정욱10/14/20201427CLR heap 관련 질문 [2]
5394진우10/12/20202868닷넷코어 (닷넷5) winform wpf는 리눅스/맥에서도 가능한가요? [2]
5393김세용9/23/20202018C#에서 대량의 클래스를 빠르게 생성하는 방법이 없을까요? [6]
5392전경호9/22/20201496WPF에서 WindowsFormsHost의 메모리 누수 문제 때문에 문의드립니다. [1]파일 다운로드1
5391민성9/22/20201515안녕하세요 항상 감사드립니다. 하나 질문 드리겠습니다. [1]
5390alower9/18/20201909System.AccessViolationException 보호된메모리 부분 예외처리 [1]
5389C# 8.0 구매자9/18/20201648후위 증감 연산자 오버로딩 방법 좀 알려주세요 [4]
5388영귤9/17/20201806Nullable reference type 에 Non-nullable reference type 을 대입해도 경고가 발생하지 않습니다. [2]
5387하태9/17/20201570안녕하세요! 비동기 통신과 관련하여 질문하나만 드리겠습니다! [3]
5386박민웅9/16/20201932정성태 스승님 안녕하세요 !! [1]
5385영귤9/12/202014433항 연산자에 ref 지원? [1]
5384손님9/10/20201352시작하세요! C# 8.0 프로그래밍 책에 오타가 있는 것 같습니다. [3]
5383민성9/8/20201759안녕하세요 자주 도움을 주셔서 감사드립니다. WPF에서 크롬 브라우저 삽입에 대하여 [1]
5382정씨9/4/20201864[C#] 시리얼통신 수신된 데이터를 그리드뷰에 뿌르는데 일정 시간이 지나면 버벅 거리는 이유가 뭘까요?? [3]
5381질문 있어요9/4/20201768웹으로 사용하는 c#과 응용프로그램으로 사용하는 c#이 많이 다른가요?? [2]
5380yeon9/3/20201551winform 의 datagridview는 바인딩이 안 되나요? [1]
5379손님9/2/20201901시작하세요! C# 8.0 프로그래밍 책에 오타가 있습니다. [3]
5378net9/2/20201646mes 응용프로그램을 .net 웹폼으로 만들기도 하나요? [2]
5377net9/2/20201534.net 사용한 웹폼으로 응용프로그램을 만들경우 [1]
5376영귤9/1/20201587nullable 타입간의 비교연산은 그냥 가능한 건가요? [1]
5375영귤8/30/20202149이벤트와 델리게이트의 차이가 궁금합니다. [2]
5374손님8/27/20202107시작하세요! C# 8.0 프로그래밍 책에 오타가 있습니다. [1]
5373agj8/26/20201518System.Single::ToString()함수의 IL코드를 보았는데 ldnull, throw가 전부입니다. 왜 이렇게 짧죠? [2]
1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...