掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
マーシャリングするには?2 (ID:78991)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
以前同じような質問をしましたが、ご指摘をいただいたので 出直してきました。 VB.NetでFTPのファイル検索処理を行いたいのですができません。 おそらく原因は”マーシャリング”だと思います。 マーシャリングの処理はどうやればいいのでしょうか? (記述方法等まったくわかりません) ヒントになるようなことでもかまいません。 ご存知の方がいらっしゃいましたら、教えてください。 以下のコードは、FTPサーバに接続して、 ファイルの一覧を取得しようというものの一部です。 (必要と思われるコードは書いたつもりです。) どうかよろしくお願いします。 Imports System.Reflection Imports System.Runtime.InteropServices Imports System Imports System.IO Imports System.Text Imports System.Net Imports System.Net.Sockets インターネット接続用API Public Declare Function InternetOpen Lib "winInet.DLL" Alias "InternetOpenA" ( _ ByVal lpszAgent As String, _ ByVal dwAccessType As Integer, _ ByVal lpszProxyName As String, _ ByVal lpszProxyBypass As String, _ ByVal dwFlags As Integer) As Integer FTPセッションの取得用API Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" ( _ ByVal hInternetSession As Long, _ ByVal sServerName As String, _ ByVal nServerPort As Integer, _ ByVal sUsername As String, _ ByVal sPassword As String, _ ByVal lService As Long, _ ByVal lFlags As Long, _ ByVal lContext As Long) As Long 'ファイル検索用API Public Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" _ (ByVal hFtpSession As Long, _ ByVal lpszSearchFile As String, _ ByVal lpFindFileData As WIN32_FIND_DATA, _ ByVal dwFlags As Long, _ ByVal dwContent As Integer) As Long ファイルデータ取得用の構造体 Public Structure WIN32_FIND_DATA Dim dwFileAttributes As Long Dim ftCreationTime As FILETIME Dim ftLastAccessTime As FILETIME Dim ftLastWriteTime As FILETIME Dim nFileSizeHigh As Long Dim nFileSizeLow As Long Dim dwReserved0 As Long Dim dwReserved1 As Long <MarshalAs(UnmanagedType.IUnknown, SizeConst:=MAX_PATH - 1)> Dim cFileName() As Byte <VBFixedArray((14 - 1))> Dim cAlternate() As Byte Public Sub Initialize() ReDim cFileName((MAX_PATH - 1)) ReDim cAlternate((14 - 1)) End Sub End Structure ----- InternetOpenでインターネットに接続。 ※ハンドルの取得OK ----- FTPセッションの格納 LngFTPSession=InternetConnect (InternetOpen,省略) ※ここもOK ----- Dim GtFindData as WIN32_FIND_DATA GtFindData.Initialize() 最初のファイル名の取得 ※↓ここでエラーが発生します。↓ AAA= FtpFindFirstFile(LngFTPSession, vbNullString, GtFindData, INTERNET_FLAG_RELOAD, 0) エラー内容 ”'System.TypeLoadException' のハンドルされていない例外が XYZ.exe で発生しました。 追加情報 : 型 WIN32_FIND_DATA のフィールド cFileNameをマーシャリングできません : この型は構造体フィールドとして、マーシャリングできません。”
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.