VB6+DirectX7のPGをDirectX7+VB.NETに移行するには?(.NETの問題?)

解決


神流美咲  2003-09-13 06:53:16  No: 79403

お世話になっています。
現在VB6で制作してきたプログラムをVB.NET 2003に移行しているのですが。仕様変更によってAny型が無くなっています。
それによりDirectX7の一部関数の引数が任意の構造体からIntPtr構造体に変更されていました。
ネット調べてみると一度Allocでハンドルを取得してそのハンドルからIntPtrを取得すればよいと分かったのですがうまくいきませんでした。
それとDirectInputDeviceのSetProperty等のguid引数のStringのパラメータが防いだと言われてしまいます。
私が間違っているのかDirectX7+VB.NETの組み合わせに無理があるのか・・・。
ご教授お願いします。


岡田 之仁  2003-09-14 07:56:50  No: 79404

私はDirectX使っていませんが・・・
VB.NETにネイティブ?に対応して動作可能なのは、DirectX9 からでは
無かったでしょうか。
マイクロソフトの検索エンジンでサーチしてみて下さい。
以上。


神流美咲  2003-09-15 08:12:29  No: 79405

いえ、従来のDirectX7および8もVB.NET側が使用できるように変更をかけてCOM扱いで使用できるんですよ
実際ににDirectDraw7については動作してるので・・・。
ただそのVB.NETの中で変更をかけてる際にAny型がIntPtrになってしまっていて・・・。


魔界の仮面弁士  2003-09-15 09:34:26  No: 79406

# 回答ではありません。

> 仕様変更によってAny型が無くなっています。
VB.NETではオーバーロードが可能になったので、Anyを使う意味は無くなりましたね。

> DirectX7+VB.NETの組み合わせに無理があるのか
使えない事は無いと思いますが、.NETからのCOM Interopは実行コストが高いので、
素直に、.NET NativeなDirectX9を使った方が良いような気もします。

もし、タイプライブラリのインポート時に自動生成されたDLLに問題が
あるならば、生成されたDLLのIldasm.exeを実行して中間言語ファイルを生成し、
そのメソッドシグネチャを修正してマーシャリングを変更する必要が
あるかもしれません。


神流美咲  2003-09-16 03:05:09  No: 79407

ではすこし的を変えて質問なのですが
AnyからIntPtrに変更されていた引数に構造体配列を渡すために以下の処理を行っていたのですが間違っているでしょうか?

' d3vVertex(4 - 1) を引数に渡したい場合

        Dim iPtr As IntPtr
        Dim Handle As GCHandle = GCHandle.Alloc(d3vVertex)
        iPtr = GCHandle.op_Explicit(Handle)
        D3dDevice.DrawPrimitive(DxVBLib.CONST_D3DPRIMITIVETYPE.D3DPT_TRIANGLESTRIP, DxVBLib.CONST_D3DFVFFLAGS.D3DFVF_VERTEX, iPtr, 4, DxVBLib.CONST_D3DDPFLAGS.D3DDP_DEFAULT)
        Handle.Free()


魔界の仮面弁士  2003-09-16 08:11:55  No: 79408

# 回答ではありません。DirectXには詳しく無いので…。

> 以下の処理を行っていたのですが間違っているでしょうか?

Normalハンドルではなく、Pinnedハンドルにして、
  Handle = GCHandle.Alloc(d3vVertex, GCHandleType.Pinned)
  iPtr = handle.AddrOfPinnedObject()
のようにしてみては如何でしょう。(未検証)


神流美咲  2003-09-17 06:14:23  No: 79409

ありがとうございます
PinnedにするとVB6の時と同じ動作をしました。
この関数は構造体配列の最初の要素のアドレスを渡すのですがそれがうまくいっていなかったようです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加