| ■No69952 (鯖の味噌 さん) に返信 > MarshalAsは付けていませんが問題ないでしょうか?
あった方が良いですが、無くても大抵は大丈夫です。
現状のコードだと、たとえば Dim s1 As String = "\\?\C:\A.xls" Dim s2 As String = "\\?\C:\B.xls" Dim a As String = s1 Dim b As String = s2 Dim Result As Integer = CopyFile(s1, s2, 1) を実行した後、「If s1 Is a Then」や「If s2 Is b Then」が False になってしまいます。 本来の型は LPTSTR ではなく LPCTSTR のはずなのですけれどね。
なので、厳密には ( _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpExistingFileName As String, _ <MarshalAs(UnmanagedType.LPStr)> ByVal lpNewFileName As String, _ <MarshalAs(UnmanagedType.Bool)> ByVal bFailIfExists As Boolean) _ As <MarshalAs(UnmanagedType.Bool)> Boolean と定義するのが正しいことになります。 これならば、「If s1 Is a Then」は True のままとなります。
あるいは、Declare ではなく <DllImport> を使うこともできます。 DllImportAttribute であれば、MarshalAsAttribute を指定せずとも 「If s1 Is a Then」が True のままとなります。 |