プロジェクトを.net 3.5から.net 4.0に移行していて、次の問題に直面しました。両方の機能がうまく動作し、.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
: 2つのDLLIMPORT文があります。しかし、.NET 4.0では、BufferToString関数の呼び出しは例外を発生させることなく、プログラムの実行を中断します。
私はCallingConvention、CharSetなどでDllImport属性のフィールドを使いました。 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
は、プログラムの開発の実行を中断しませんが、機能は「何も」を返しません。
David、明確な説明をいただきありがとうございます。それは問題の解決です。 – KorVet