VB2010でのAPIの使い方を教えてください

このQ&Aのポイント
  • VB2010にて、PCとUSBを介して繋がっている機器からデータのやり取りを行おうとしています。APIの仕様書には「API 使用時には ***.h をインクルードして使用してください→#include “***.h”」、「リンク時には、***.lib もリンクしてください」と書かれています。
  • VB2010で使用するためのAPIは、機器メーカから***.dllという形で提供されています。VB6で作成されたサンプルソフトもありますが、VB2010ではそのまま使用することはできません。
  • 具体的にプログラム上でAPIを利用するためには、USBポートのOpen/CloseやRead/Writeなどの関数を使用する必要があります。VB2010のプログラムには、API使用時に必要な***.hファイルをインクルードし、リンク時には***.libファイルもリンクする必要があります。
回答を見る
  • ベストアンサー

VB2010でのAPIの使い方を教えてください。

お世話になります。VB初心者です。ごくごく基本的なことを教えてください。 VB2010にて、PCとUSBを介して繋がっている機器からデータのやり取りを行おうとしています。 そのためのAPIが、機器メーカから***.dllという形で提供されています。同様に、これを使ったサンプルソフトもついているのですが、VB6で作ったものなので、VB2010ではそのまま使えません。 このAPIには、USBポートのOpen/CloseやRead/Writeなどの関数があるので、これを使いたいのですが、具体的にプログラム上で、どういうふうに定義(?)すればいいのでしょうか? APIの仕様書には、「API 使用時には ***.h をインクルードして使用してください→#include “***.h”」、「リンク時には、***.lib もリンクしてください」などと書かれています。 まだ、VB2010を勉強し始めたばかりなので、こういう基本的な部分がわかっていません。 お教えいただけると助かります。よろしくお願いします。

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

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

VB6のサンプルをVB2010に変換する。 http://msdn.microsoft.com/ja-jp/library/bszew91f.aspx http://msdn.microsoft.com/ja-jp/library/dd297706.aspx ただし、そのままでは動かないので調整が必要である。 特に、構造体に注意。 http://www.atmarkit.co.jp/fdotnet/dotnettips/026w32struct/w32struct.html

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

標準モジュールで定義する場合 Public Declare Function 関数名 Lib "***" (~) As Long フォーム等クラスモジュールで定義する場合 Private Declare Function 関数名 Lib "***" (~) As Long 関数名は実際の名前です。LibでDLLのパスを指定しますが、システムフォルダ、 カレントフォルダの場合はディレクトリを省略できます。".DLL"はあってもなくても かまいません。 難しいのはパラメータの定義ですが、DWORDとかintならば 「ByVal xx As Long」 となります。文字列の場合は必ず「ByVal xx As String」です。構造体の場合は ポインタ渡しなので、「yy As 型名」となります。型はTypeで自作する必要がある でしょう。 こう言って「ああ、そうですか」と分かるくらいなら、苦労はありませんね。 C言語で言うデータ型がVBのどのような変数型に対応するか熟知していないと難しいので、 こういう作業に習熟していない人には無理かと思います。ヘッダファイルの定義内容を 具体的に記載してみてください。そうすれば答えも得られると思いますよ。

関連するQ&A

  • VB 2008 DLL作成の方法

    当方Visual Studio 2008のVB、C++で開発をしています。 VS2008のVBでクラスライブラリとして作成し、ビルドをしてDLLを作成したのですが、 対となるLIBファイルがどこにも見当たりませんでした。 VS6.0のVBではLIBファイルも作成されました。 VS2008のVBでLIBファイルを作成する方法をご存知の方いらっしゃいましたら教えてください。 LIBファイルを使用する理由は、VBで作成したDLLをC++に組み込むときにリンクさせる為です。 ※今回はLoadLibrary関数を使わず、LIBファイルを使おうと考えています 以上、宜しくお願い致します。

  • エントリポイントがDLLから見つからない

    WIN2000のVC++6.0を使ってWin32DLLを作成して、VBから呼びたいのですが、「エントリ関数がDLLファイル内に見つからない」言われるので、ためしにVCから呼んでみたのですが、表題のようなエラーになります。内容は入門書のサンプル通りに作ってみたのですが・・・ちゃんとEXPORTされていないのでしょうか? [DLL側] <ヘッダファイル> #ifdef XXXX_EXPORTS #define XXXX_API __declspec(dllexport) #else #define XXXX_API __declspec(dllimport) #endif XXXX_API long AddLong(long a, long b); <ソースファイル> XXXX_API long AddLong(long a, long b) { return a + b; } [呼び出し側VC] #include "stdafx.h" #include "XXXX.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { TCHAR s[20]; wsprintf(s,"%d",AddLong(123,456)); MessageBox(NULL,s,"DLLの参照",MB_OK); return 0; } プロジェクトの設定のリンク時のライブラリには XXXX.lib を追加しました。 初めてのDLL作成でよく分かりません。

  • APIって

    VBで簡単なプログラムを作成しています。 APIも便利なのでサンプルを見ながら使っていますが ふと疑問に思ったので教えて下さい。 以下の"advapi32.dll"と"ADVAPI32"の違いは何なのでしょうか。 大文字、小文字の違いだけで同じなのですか? dllを省略すると引数に&をつけるつけないの違いが出るのでしょうか? 'レジストリの値を取得する Public Declare Function RegQueryValueExstr Lib "ADVAPI32" Alias "RegQueryValueExA" (ByVal hKey&, ByVal lpValueName$, ByVal lpReserved&, ByVal lpType&, ByVal lpData$, lpcbData&) As Long 'レジストリの値を設定する Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As Any, ByVal cbData As Long) As Long ネット上にたくさんサンプルはあるので、やりたいことの方法を調べてできればOKといったやり方です。 きちんと勉強したい気持ちもありますので、参考書籍等紹介して頂いてもうれしいです。

  • DirectXのdmusici.libについて

    宜しくお願い致します。 ここ2ヶ月ほど、XPSP2及びVC++6.0の環境下で、win32APIを使って簡単なミニゲームを細々と作成してきましたが、たまたまDirectXについて記載してある本を入手した関係で、環境をVC2008Express+DirectXに変更しました。 それ以前にプログラミング経験は無い為、レベルは初心です。 質問: 1)dmusici.libは存在するのか? 2)存在するとしたら入手先はどこか? 3)存在しない場合、エラーを無くすにはどうしたら良いか? とりあえず上記設定で、DirectXのフォルダに入っているサンプルプログラムを動かそうと思ったのですが、 LINK : fatal error LNK1104: ファイル 'dmusici.lib' を開くことができません。 と言われてしまいました。 サンプルプログラムは、 #include <Windows.h> #include <mmsystem.h> #include <d3dx9.h> #pragma warning( disable : 4996 ) #include <strsafe.h> #pragma warning( default : 4996 ) … と記載しています。 色々調べたところ、dmusici.h というインクルードファイルは存在し、dxguid.lib をリンクして使用するらしいのですが、dmusici.lib については、サイトが全て英語だったこともあり、理解出来ませんでした。 以上宜しくお願い致します。

  • VB.NET DLL【API関数(コールバック関数)】の呼び出し方法について

    目的は下記(3)のAPI関数をVB.NETで呼び出したいのですが、そこにいきつくまでにいろいろと壁にぶちあたっております。 (1)API関数をVB.NETから利用するにあたって どのような手順および調査・学習すればVB.NETからWin32 APIを独力で呼び出せるようになるのでしょうか?ネット上に情報が乏しく、いきずまっております。 (2)API関数の調査方法、またコールバック関数について 下記(a),(b)のようにWin32 API関数を宣言して、あとは呼び出し側の関数で(a),(b)で宣言したAPI関数を記述するだけで基本的には使用できるようになるという大まかなイメージはつかめております。 このあとでAPI関数をMSDNで調べると引数がHWNDやPCTSTRなど見慣れないものが出てきて、次のURL(http://www.atmarkit.co.jp/fdotnet/dotnettips/024w32api/w32api.html)を見ると、APIの型とVB.NETの型は違うので型変換をしなければならないとあります。またさらに私が呼び出したい関数はコールバック関数なるものでこれまた?な状態です。 そこでAPIとVB.NETの型変換の調査方法およびコールバック関数の利用方法などを教えていただけないでしょうか? (a)DllImport属性を利用する方法 <System.Runtime.InteropServices.DllImport("DLL名")> _ Function API関数名(仮引数) End Function (b)Declareステートメントを利用する方法 Declare Function API関数名 Lib "DLL名" (仮引数) (3)InstallHinfSection関数(http://msdn2.microsoft.com/en-us/library/aa376957.aspx)について 下記のコードを実行したのですが、実行時エラーにはならないのですが、APIの関数が動作してくれません。どこが悪いのかがまったく見当がつかないのですがどなたかアドバイスいただけると助かります。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click InstallHinfSection(Nothing, Nothing, "DefaultInstall 132 C:\INF_TEST\Original.inf", 0) End Sub   Declare Function InstallHinfSection Lib "setupapi" Alias "InstallHinfSection" (ByVal hwnd As String, ByVal ModuleHandle As String, ByVal CmdLineBuffer As String, ByVal nCmdShow As Integer) As Long APIが難しすぎていろいろとおかしなことを書いているかもしれませんが、どうぞよろしくお願いいたします。

  • APIの呼び出し。認識合ってるでしょうか?

    VB.NETかC♯でAPIを作って、html内のボタンが押された時、JavaScriptでそのAPIを呼ぶ、 ということをやりたいと思っているのですが、可能でしょうか。 また、APIを作ると聞いたものの、実態としては、Publicな関数を持つDLLという認識で 良いでしょうか。 Publicなクラスにして、Publicな関数をいくつか作っているのですが、出来上がった後で JavaScriptで呼べないと嫌だなーと思いまして…。

  • VB.NETでCreateProcess

    VB.NET(2003)で、別exeを起動し、終了まで待機するということをするために、 system.Diagnostics.Processクラスを使用していました。 しかし、実際に動かす環境がMetaFrameなのですが、 その環境では、このクラスは使用できないようで画面の起動すらできなくなります。 ですので、別の方法ということで、APIのCreateProcess、WaitForSingleObjectを使用するように変更したいのですが、 VB.NETでのサンプルが余り無いため、パラメータにどのように設定するかなどがよくわかりません。 API自体使ったことが無いので、根本的にわから無すぎるのです・・・ VB.NETでAPI利用サンプルが多く掲載されているサイト、 できれば、CreateProcess、WaitForSingleObjectを使用しているサンプルなどありましたら、ご教授願います。 よろしくお願いいたします。

  • .objファイル、.lib ファイルについて

    ◆C++でのコンパイルされたプログラムの参照について。  以前、VB.netで開発をしていた時は、コンパイルをするとDLLが作成され、  それを他のプログラムからリンクして使用していました。  C++の場合h、cppのファイルをコンパイルすると、「.DLL」はできないのでしょうか? ◆.obj、.lib について  Visual Studioにて、.obj、.lib を、参照先に設定していますが、  内容をよくわかっていません。  オブジェクトリンク、ライブラリリンクとは、  (1)それぞれどんな概念なのでしょうか?  (2).obj、.libでは何が違うのでしょうか?

  • VB.NETでのネットワーク参照

    VB.NETを使用してファイルのコピーをしようと思っています。 そのソースはVB6で使用したソースをバージョンアップして使う予定です。 ファイルコピーをする際にSHFileOperationというAPIを使用していました。 .NETへ移行すると、実行時にエラーが帰ってきてしまいます。 VB6と.NETではAPIの宣言の仕方も異なるのでしょうか? バージョンアップ後に追加されたメッセージで、'UPGRADE_WARNING: 構造体 SHFILEOPSTRUCT に、この Declare ステートメントの引数としてマーシャリング属性を渡す必要があります。 詳細については、'ms-help://MS.VSCC/commoner/redir/redirect.htm?keyword="vbup1050"' をクリックしてください。 Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (ByRef lpFileOp As SHFILEOPSTRUCT) As Integer このように書き換わっていました。リンク先を見ても解決の糸口が見えません。 どなたかご指導お願いします。

  • cygwinでopenGL

    cygwinでopenGLが出来ません>< まず、私がやった設定を書いてみます。 学校で使用している教科書に指定されているように、 実行用DLLファイル[opengl32.dll][glu32.dll][glut32.dll]の3つを\WINDOWS\system32に入れました。(glut32.dll以外は元々ありました) ヘッダファイル[gl.h][glu.h][glut.h]の3つを\cygwin\usr\include\w32api\GLに入れました。(glut.h以外は元々あり、[glext.h]というのもありました) 開発ライブラリとして[opengl32.lib][glu32.lib][glut32.lib]を入れるように書いてあり、入れる場所はおそらく\cygwin\lib\w32apiだと思うんですけど、[libopengl32.a][libglu32.a][libglut32.a]なるものが既に存在しました。これは同じ物とみなしてよろしいのでしょうか? 次に、[gcc ●●.c -DWIN32 -lglut32 -lglu32 -lopengl32]とコンパイルしてみた所、エラーが大量に出ました。コンパイル方法が間違っているのでしょうか? 以前にJAVAを学習するときに、環境変数を変えたんですけれど、それが影響しているのでしょうか? 質問多くて、しかもややこしくてすみません。

専門家に質問してみよう