.net 3.5에서 .net 4.0으로 프로젝트를 마이그레이션 할 때 다음과 같은 문제가 있습니다. 이 같이 DllImport 문이있다 : 두 가지 기능이 잘 작동 .NET 3.5가져온 네이티브 함수가 .NET 4.0에서 작동하지 않습니다.
<DllImport("hid64.dll")> _
Public Sub GenerateHardwareID(_
<MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=1)> ByVal Buffer As Byte(), _
ByVal BufferLength As Int32)
End Sub
<DllImport("hid64.dll")> _
Public Function BufferToString(_
<MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=1)> ByVal Buffer As Byte(), _
ByVal BufferLength As Int32) As <MarshalAs(UnmanagedType.LPWStr)> String
End Function
은. 그러나 .NET 4.0의 경우 BufferToString 함수를 호출하면 예외가 발생하지 않고 programm 실행이 중단됩니다.
나는 DllImport 속성의 필드 인 CallingConvention, CharSet 등과 같이 놀았습니다. http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.aspx 성공하지 못했습니다.
이 변형 :
<DllImport("hid64.dll", CharSet:=CharSet.Auto, PreserveSig:=False, SetLastError:=True)> _
Public Function BufferToString(_
<MarshalAs(UnmanagedType.LPArray)> ByVal Buffer As Byte(), _
ByVal BufferLength As Int32) As <MarshalAs(UnmanagedType.LPWStr)> String
End Function
이 programm에 실행하지만 함수가 반환 '아무것도'를 중단하지 않습니다.
David, 명확히 설명해 주셔서 감사합니다. 그것은 문제의 해결책입니다. – KorVet