Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
System.IntPtr に変換できません
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9470#CommentId13669
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2009/11/28 06:12:18
# OpenGL は専門外なので、あまり具体的な回答はできないのですが。
> Public Class TessCall
> Public Sub glEndCB()
> glEnd()
> End Sub
> End Class
これって、本当に GLU_TESS_VERTEX で使うためのメソッドですか?
End というからには、GLU_TESS_END で使う物にも見えるのですが…。
> Public Delegate Sub CallCC() 'glEndCB() 'デリゲート
引数無しの Sub なら、自身で Delegate を定義する代わりに、
MethodInvoker デリゲートをそのまま使う事もできます。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.methodinvoker.aspx
> Public Function TessMake(ByVal ListNo As Integer) As Integer
引数 ListNo が使われていないのが気になります。
> gluTessCallback(tobj, GLU_TESS_VERTEX, returnValue3)
今回、gluTessCallback の引数は、Declare にて
ByVal IntPtr
ByVal UInt32
ByVal IntPtr
と定義されているのですよね。しかし、ここで渡している引数はそれぞれ
Dim tobj As Integer = gluNewTess()
GLU_TESS_VERTEX …… 記載が無いので不明
Dim returnValue3 As IntPtr = Marshal.GetFunctionPointerForDelegate(New CallCC(AddressOf MyCall.glEndCB))
となっており、少なくとも、第一引数の型が違っているように見えます。
それぞれに渡す値の型は、Declare 宣言と合わせておいてください。
> Public Declare Sub gluTessCallback Lib "GLU32.DLL" (ByVal tess As IntPtr, _
> ByVal which As UInt32, ByVal fn As IntPtr)
宣言部に
Public Declare Sub gluTessCallback Lib "GLU32.DLL" (ByVal tess As IntPtr, _
ByVal which As UInt32, ByVal fn As MethodInvoker)
を追加すれば、
Dim tessellate As IntPtr = gluNewTess()
gluTessCallback(tobj, GLU_TESS_VERTEX, AddressOf glEndCB)
と記述できるかと思います。動くかどうかは別として。
> CallCC のアドレスが渡ってないようです。
そもそも、GLU_TESS_VERTEX のコールバック関数は、
引数 0 個の Sub メソッドではなく、
引数 1 個の Sub メソッドではありませんでしたっけ?
(GLU_TESS_END のコールバック関数は引数 0 個)