tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルSusieプラグインの使用
記事No10947
投稿日: 2012/11/07(Wed) 15:49
投稿者わかな
こんにちは。vb.net(2005)にてSusieプラグインを使用した画像表示を行なおうと考えています。
ある参考サイトの記載を少し変えて以下の記述を行なったのですが、どうも上手くいきません。

Susieプラグインは「ifgif.spi」を使用。gifファイルはvbで元々扱えますが
これが成功してから他の画像拡張子を試そうと考えております。
また、とりあえずは画像表示ではなく画像サイズの取得から行なってみようとしております。

ご教授お願いできないでしょうか。

Option Explicit On
Public Class Form1
    Private Structure BITMAPINFOHEADER
        Dim biSize As Long
        Dim biWidth As Long
        Dim biHeight As Long
        Dim biPlanes As Integer
        Dim biBitCount As Integer
        Dim biCompression As Long
        Dim biSizeImage As Long
        Dim biXPelsPerMeter As Long
        Dim biYPelsPerMeter As Long
        Dim biClrUsed As Long
        Dim biClrImportant As Long
    End Structure

    Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal dest As BITMAPINFOHEADER, ByVal Source As Long, ByVal length As Long)
    Private Declare Function LocalFree Lib "kernel32" (ByVal MemHandle As Long) As Long
    Private Declare Function LocalLock Lib "kernel32" (ByVal MemHandle As Long) As Long
    Private Declare Function LocalUnlock Lib "kernel32" (ByVal MemHandle As Long) As Long
    Private Declare Function GetPicture Lib "ifgif.spi" (ByVal FileSTR As String, ByVal OffSet As Long, ByVal Mode As Integer, ByVal MemoryHandle As Long, ByVal InfoHandle As Long, ByVal CallBack As Long, ByVal CallBackLong As Long) As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim BitMapMemoryHandle As Long
        Dim BitMapInf As Long
        Dim LocalMemoryBMP As Long
        Dim LocalMemoryInf As Long
        Dim BitMapHeader As BITMAPINFOHEADER

    'test.gifと言う名称の256×256サイズの画像 
        GetPicture("D:\test\test.gif", 0, 0, BitMapMemoryHandle, BitMapInf, 0, 0)

        LocalMemoryBMP = LocalLock(BitMapMemoryHandle) 'メモリのロック
        LocalMemoryInf = LocalLock(BitMapInf)

        MoveMemory(BitMapHeader, LocalMemoryBMP, Len(BitMapHeader)) 'メモリ移動

    'とりあえずは画像表示ではなくサイズを取得してみようとしてますが、取得数値は0になってしまう。
        Dim size As Integer = BitMapHeader.biHeight
        Debug.Print(test)

        LocalUnlock(BitMapMemoryHandle) 'メモリロック解除
        LocalUnlock(BitMapInf)

        LocalFree(BitMapMemoryHandle) 'メモリ開放
        LocalFree(BitMapInf)
    End Sub

[ツリー表示へ]
タイトルRe: Susieプラグインの使用
記事No10948
投稿日: 2012/11/07(Wed) 16:28
投稿者Hongliang
VB7(VB.NET 2003)以降、基本型にいくつか修正が入っています。VB6までの記述を流用する場合は注意してください。
具体的には、Longは64bit整数値を意味するようになり、代わりにIntegerが32bit整数値を意味するようになっています。また、16bit整数値としてShort型が、ポインタ・ハンドル等を表す型としてIntPtrが追加されています。
これらを適切に使ってください。

それから、確かSusieプラグインは呼び出し規約がcdeclだったはずです。
そうであるなら、Declare構文ではstdcallしか扱えないので、DllImport属性を使って関数定義し、呼び出し規約をCdeclに指定する必要があります。

とりあえずこれだけ。
// というか、「susie vb.net」で検索すればいくらでも出てくるような。

[ツリー表示へ]
タイトルRe^2: Susieプラグインの使用
記事No10950
投稿日: 2012/11/08(Thu) 16:51
投稿者わかな
Hongliang様
ご教授ありがとうございます。
当方スキル不足のため、記載いただいた内容を調べたのですが
どうも分からない箇所が多数です。
もしよろしければ、どういったソースにすれば良いかなど
具体的に記載いただければ非常に助かります。

なお、vb.netでのsusie関連の情報は多いようで少なく、
見つかってもリンク切れやvb6版などが多いです。

[ツリー表示へ]