tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVB6.0から.NETへの移行(API関連)
記事No963
投稿日: 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で名前付きパイプの内容を取得する事は可能なの
でし
ょうか?

長くなりましたが、以上の二点を分かる方が居ましたらよろしくお願いします。

[ツリー表示へ]
タイトルRe: VB6.0から.NETへの移行(API関連)
記事No969
投稿日: 2004/07/09(Fri) 17:01
投稿者緋色
ヘルプで「プラットフォーム呼び出しによるデータのマーシャリング」を参照。

1、構造体を値渡し、構造体を参照渡しのサンプルが参考になります。

2、パイプハンドルを IntPtr 型とし、FileStream のコンストラクタに渡す。

[ツリー表示へ]
タイトルありがとうございます
記事No971
投稿日: 2004/07/12(Mon) 08:31
投稿者シャア専用とし
緋色さん、ありがとうございます。
ヘルプを参照して解決を試みてみます。

[ツリー表示へ]