タイトル | : VB6.0から.NETへの移行(API関連) |
記事No | : 963 |
投稿日 | : 2004/07/06(Tue) 20:43 |
投稿者 | : シャア専用とし |
[OSのVer]:Windows2000 [VBのVer]:VB.NET 2003
現在私は、VB6.0で作られたアプリをVB.NETで作り直す作業をしております。 基本的なコンバートは問題なかったのですが、APIをコールしている処理の幾つかが 実行エラーが発生している状態です。下記の詳細をご覧になってお分かりの方はご享受をお願いしま す。
【詳細】 @ '/// 宣言部 /// Public Declare Function ReadFile Lib "kernel32" (ByVal hFile As Integer, ByRef lp Buffer As Object, ByVal nNumberOfBytesToRead As Integer, ByRef lpNumberOfBytesRead As Integer, ByRef lpOverlapped As OVERLAPPED) As Integer
<StructLayout(LayoutKind.Sequential, _ CharSet:=CharSet.Auto, Pack:=1)> _ Public Structure OVERLAPPED Dim Internal As Integer Dim InternalHigh As Integer Dim offset As Integer Dim OffsetHigh As Integer Dim hEvent As Integer End Structure
<StructLayout(LayoutKind.Sequential, _ CharSet:=CharSet.Auto, Pack:=1)> _ Public Structure IFHEADER Dim lngErrorOrParm As Integer Dim lngSize As Integer End Structure
Public glngIfPipe As Integer Public glpOverlappedRead As OVERLAPPED
'/// 実行部 /// lngRet = ReadFile(gintIfPipe, IfHeaderParam, intSize, intSize, glpOverlappedRead)
各パラメータは下記のようになっております。 gintIfPipe //名前付きパイプのハンドル IfHeaderParam //IFHEADER型で宣言したローカル変数(値は0) intSize //Len(IfHeaderParam)の結果を格納(値は8) glpOverlappedRead //OVERLAPPED型で宣言したグローバル変数(値は0)
この状態で実行すると「パラメータが間違っています」とエラーが帰ってきました。 ヘルプを参照したところ下記のような宣言の記述があり、パラメータlpBufferには 「バッファへのポインタを指定します」となっておりました。 .NETでポインタの指定はできるのでしょうか?
BOOL ReadFile( HANDLE hFile, // ファイルのハンドル LPVOID lpBuffer, // データバッファ DWORD nNumberOfBytesToRead, // 読み取り対象のバイト数 LPDWORD lpNumberOfBytesRead, // 読み取ったバイト数 LPOVERLAPPED lpOverlapped // オーバーラップ構造体のバッファ );
A また、ネットで検索してみるとWin32APIに対応する.NET Framework APIをまとめた 資料をMicrosoftが提供していました。 ReadFile関数に対応するSystem.IO.FileStream.Readで名前付きパイプの内容を取得する事は可能なの でし ょうか?
長くなりましたが、以上の二点を分かる方が居ましたらよろしくお願いします。
|