こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VB.NETとVB6.0でAPIを使う場合、書き方は違いますか?

VB.NETで使うAPIというものを勉強してみたいと思って
本を探しているのですが、.NET用の本が少ないようです。

APIを使う部分のコードの書き方は.NETと6.0では大きく違うでしょうか?

投稿日時 - 2006-04-22 14:31:33

QNo.2107163

暇なときに回答ください

質問者が選んだベストアンサー

BLUEPIXYさんが言われているように、使用するための引き込みの宣言が微妙に異なります。

大きく違う部分としては、メモリを意識する方法だと思います。
何かと
Imports System.Runtime.InteropServices.Marshal
クラスを多用することになります。


例えばVB6時代に
・VarPtrを使用しなければならない場合
・APIの引数に構造体を利用し、構造体内部のメンバに配列が存在する場合
・APIの引数に構造体を利用し、構造体内部のメンバに固定長の文字列型が存在する場合
・APIの引数に構造体を利用し、構造体内部のメンバのIN/OUTなどの属性を細かく設定しなければならない場合
・APIの引数に、構造体の領域サイズ長を渡す必要がある場合
・API関数実行後、取得したポインタから、特定の型にキャストする場合
などなど、、、

http://okwave.jp/kotaeru.php3?q=2092957
に、Marshalクラスを多用しているサンプルを書いてますので、よろしければどうぞです。



ちなみに私の場合は、.NETの書籍は一冊も購入しておりません。
VB6時代に購入した、APIの書籍
「Visual Basic Tips 1000」
http://bookweb.kinokuniya.co.jp/guest/cgi-bin/wshosea.cgi?W-ISBN=4883371980
を愛用しております。
ガリバーさんが出している書籍で、今は亡き[vbvbvb.com]のAPIサンプルが出ております。
HTMLで一覧が出ているので、秀丸などでGREPして、使用したい目的のAPIが素早く検索できます。

さらに
http://www.microsoft.com/japan/msdn/net/general/win32map.asp
で、本当にAPIを使用しなければならないかを調べた後、どうしてもAPIならば、サンプルソースをEXCELのVBAなどに張って、変換を行っております。


APIで使用するDLLは「VB6用」でもないし「.NET用」でもないですよね。
わたしは最近本屋さんに行っておりませんので、.NET用で多くのサンプルがある本が出版されているのか知らないのですが、、、
「.NET用の本」として固執せずに、多くのサンプルが出ている本を求めた方が、何かと便利だと思います。
「どのようなAPI関数が存在するか」「API関数で可能なこと」
が見えます。


VB6用の本を購入した場合、どうしても変換がわからない場合は、ここのような掲示板や、メーリングリストに投稿してはいかがでしょうか?
変換は「慣れ」です。繰り返し行うことで、自然と身につきます。変換のパターンは、経験上、それほど多いとも思いません。

そうすることにより、「このAPIは、、、」という技術ではなく「このタイプのAPIは、、、」という、参考文献の存在しないAPI関数にも強くなれると思います。
機会があれば、自分でCで呼び出される側のDLLを作成してみるのも、スキルアップだと思いますよー
http://okwave.jp/kotaeru.php3?q=235547

投稿日時 - 2006-04-24 15:27:22

お礼

お返事ありがとうございます。
まだまだ分からないことだらけで、ちょっとしたことで何日も停滞してしまう状態ですが、
少しずつ感じが掴めるように勉強して行きたいと思います。
Visual Basic Tips 1000という本は初心者にもよさそうですね。
APIは存在をまず知らないとどうにもならないので、
とても便利な本のように感じました。
ご回答ありがとうございます。

投稿日時 - 2006-04-24 18:36:30

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

Declare ステートメントを使った書き方は、ほとんど同じですが、
Integer などのサイズがVB.NET とVB6 では、違うことに注意する必要があります。
http://msdn2.microsoft.com/ja-jp/library/4zey12w5(VS.80).aspx
また、
VB.NET では、DllImport 属性を利用した書き方もできます。(下のサイトによると、こちらが推奨)
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/win32API.aspx

投稿日時 - 2006-04-22 15:26:37

お礼

良いページのご紹介ありがとうございます。
詳しく出ているようなので、よく目を通してみたいと思います。
ご回答ありがとうございます。

投稿日時 - 2006-04-24 18:30:24

あなたにオススメの質問