• ベストアンサー

VB.NETで、DLLを頂いたんですが・・

VB.NETでプログラムを作成しているのですが、 DLLを頂きました。 このDLLをプログラムで使いたいのですがよくわかりません。 (1)DLLは実行ファイルにおけばいいんですよね? (2)DLLを参照しろっていう設定は必要ですか? (3)DLLには、プロパティ、メソッド、イベントとあるみたいなんですが、これらを宣言しないといけないと思うのですがどうやればいいのでしょうか? (4)下のような資料もらったのですがVBcnvというのが定義されていないとエラーがでるのですがどうやって宣言するのでしょう? private <任意名> as VBcnv (5)libファイルも一緒にあったのですが、どういう風に使えばいいのでしょうか?何につかうのでしょうか? すいません、どなたかお助けを~

  • Haule
  • お礼率52% (125/240)

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

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

> 参考資料にはVB6.0のdll追加方法が書いてありまして、それには、参照設定という画面が書いてあります。 それならCOMですね。 >(1)  インストーラが用意されていないのであれば、手動でレジストする必要があります。 >(2)  VS.NETのプロジェクトがCOMを参照する必要があります。 >(3) 必要ありません。 VS.NETのプロジェクトがCOMを参照すれば自動的にラッパークラスが作成されます。 オブジェクトブラウザでプロパティ、メソッド、イベントを確認できます。 >(4) private <任意名> as new ラッパークラス名 >(5) 謎。

Haule
質問者

お礼

ありがとうございました。参照設定で参照するようにしました。プロパティに設定値をいれてみようとするとインスタンスがないといわれエラーがでてしまいました。もうすこし勉強してみます。

その他の回答 (6)

  • bob_n
  • ベストアンサー率35% (610/1732)
回答No.6

VBcnv.名前とゆうことは、DLLから返ってくる答えが、構造体(typeで宣言してある)のポインタ(変数の置かれている場所)としてもどってくるとおもいます。 構造体の定義もしないとだめだと思います。 例として、VBcnvがDVDプレーヤーだとします。 名前とゆうのは、DVDプレーヤーのなかのplayボタンという風に、VBcnv.のなかにいろいろな変数が定義されているとゆうことです。(わかりにくいかもしれませんが) >DLLは市場にでているようなDLLではなく、ファイル変換を手助けしてくれるようなDLLなのです。 自分で作ったものでも手続きは同じです。

Haule
質問者

お礼

ありがとうございます。イメージはちょっとわかりました。勉強しなおしてみます。

  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.5

#1 の者です。 > Private Shared [Sub | Fucntion] [識別名](ByVal [引数] As [型]) [As [型]] > End [Sub | Function] > どっちでもいいのでしょうか? 大切なのはその上にあった属性なんですが... DllImport 使った方が良いですね。 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vccore/html/vcwlksysimportattributetutorial.asp

Haule
質問者

お礼

ありがとうございました。難しくてよくわからなかったのですが、勉強してみます。

  • lasichi
  • ベストアンサー率31% (122/389)
回答No.4

No2です。 dllの中の関数を使うだけなんですよね? でしたらDll名、関数名、引数、戻り値があればさっき書いたように宣言して普通にソースの中で使えます。 VBcnvがDll名なんでしょうか? dllを使う為の宣言とプロパティ、メソッド、イベントは関係ないと思います。

Haule
質問者

お礼

ありがとうございました。やってみたのですが、エラーがでてしまって、勉強してみます。

  • bob_n
  • ベストアンサー率35% (610/1732)
回答No.3

つかう、DLLによっても違います。呼びだし規約があって、 それぞれ、違います。どのような、DLLかがわからないと説明しにくいです。 たとえば、WINDOSのAPIのを使う場合、[user32.dll]のウィンドウを検索する関数を使う場合は、 Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Long,ByVal hwndChildAfter As Long,ByVal lpszClass As String,ByVal As String,ByVal lpszWindow As String ) As Long のように宣言します。 hwndParent はロング型ですよ hwndChildAfterはロング型ですよ lpszClassはストリング型ですよ lpszWindowはストリング型ですよ 帰ってくる答えは、ロング型ですよ と、DLLを作った人が決めます。その、約束どおりによびださないと、エラーになったりします。 なので、その、DLLがどのようなものかわからないと、説明しにくいのです。

Haule
質問者

補足

DLLは市場にでているようなDLLではなく、ファイル変換を手助けしてくれるようなDLLなのです。 参考資料にはVB6.0のdll追加方法が書いてありまして、それには、参照設定という画面が書いてあります。

  • lasichi
  • ベストアンサー率31% (122/389)
回答No.2

1.実行ファイルと同じフォルダに入れておけばOKです。 2.3. 通常、 Public Declare Function 関数名 Lib DLL名 () As 型 のように書きます。(使いたい関数全て) 4.VBcnvとはオリジナルの型でしょうか? typeで定義してあげればいいと思いますが・・ どういうものか資料とかないのですか?? 5.dllとは関係ないと思いますがこれだけでは判断つきません。

Haule
質問者

補足

レスありがとうございます。 頂いた資料には、プロパティ、メソッド、イベントが書いてありまして、資料を見る限り、 プロパティとメソッドに関しては、すべて VBcnv.名前 となっていました。 プロパティ、メソッド、イベントがよく理解できていないのですが、 プロパティ=変数みたいなもの? メソッド=関数 イベント=Btn_clickみたいなもの? と認識しているのですがあっているのでしょうか。 だとすると、メソッドはPublic Declare Function 関数名 Lib DLL名 () As 型 でできそうなのですが、他の二つの宣言方法がわからないです>< また、イベントのソースってDLL側にあると思うんですが、イベント発生時に何かやりたいとした場合どうするんでしょうか?

  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.1

こんにちは、じゃんぬねっと です。 この DLL がクラス ライブラリ (.NET のマネージコード DLL) なのか、そうでないかで回答が変わります。 > libファイルも一緒にあったのですが これを見る限り、前述ではない DLL でしょうか? だとすると、P/Invoke などを調べてみてください。 メソッドの定義はこんな感じです。 <DllImports("HogeHoge.dll" CharSet:=CharSet.Auto)> _ Private Shared [Sub | Fucntion] [識別名](ByVal [引数] As [型]) [As [型]] End [Sub | Function]

Haule
質問者

補足

DLLはVB.NETで作っていないと思います。 P/Invokeとはなんでしょうか?>< メソッドの定義はlashichiさんの Public Declare Function 関数名 Lib DLL名 () As 型 と JeanneNetさんの Private Shared [Sub | Fucntion] [識別名](ByVal [引数] As [型]) [As [型]] End [Sub | Function] どっちでもいいのでしょうか?

関連するQ&A

  • VB6から参照可能なDLLの作成

    VB6から参照可能なDLLの作成を参考書をみながらしましたが、上手くいかない為質問させていただきます。 開発環境VC++ 2005 C++ CTEST.dll #include <windows.h> __declspec (dllexport) int __stdcall test(int i) { i = i + 5; return i; } .defファイル LIBRARY "test" DESCRIPTION EXPORTS A 以上でDLLを作成し、VB6側で Private Declare test Lib "CTEST.dll" (ByVal i as integer) で宣言しても「エラー53 ファイルがみつかりません」と表示されます。「参照の追加」から参照しようとしても「このファイルは参照できません。」をエラーがでてしまいます。 直すべき点はどの部分なのでしょうか? ご教示ねがいます。

  • VB.NETで作成したDLLについて

    ご回答宜しくお願い致します。 現在、VBでユーザーコントロールのDLLを作成し、 DLLをC#で使用するというプログラムを開発してます。 そこで、以下のような現象が起こり 対応できかねております。 まず、VBで以下のメソッドを書きました。 Public Sub showMessage(ByVal bol As Boolean)     MessageBox.Show(bol) End Sub そして、C#からDLLのコントロール ( Panel1 ) を呼び出し、 private void Panel1_MouseClick(object sender, MouseEventArgs e) {     Panel1.setSelectedFlg(true); } これでメッセージボックスが表示されると思ったんですが表示されません。 VBのMessageBoxを別の処理に変えても全く動作しません。 メソッドを動作させる方法はございますでしょうか 宜しくお願い致します。

  • VB.Netでのエラーについて

    こんにちわ。 いまVB.Netでプログラミングしている者です。 あるVBプロジェクトファイル(aaaa.dllとします)で ある.dllファイル(bbbb.dllとします)を参照設定しています。 そこでこのVBプロジェクトファイルをビルドすると, このVBプロジェクトファイル内のあるVBファイルの行で, 「Public Function ~」はプロジェクトbbbb.dllで宣言されていますが,プロジェクトaaaa.dllによって参照されていません。」 というコンパイルエラーになってしまいます。 ソリューションエクスプローラで見たところ, 上記のVBプロジェクトファイルの参照設定で,bbbb.dllはエラー表示されていません。 念のためbbbb.dllを一旦削除して,最新のbbbb.dllを改めて「参照追加」したのですが,状況が変わりません。 このエラーは何が原因なのでしょうか? 教えてください。よろしくお願いします。

  • DLL内のイベントをハンドリング

    VB2008にて、外部DLL(VB2008作成)を使用しようと考えています。 外部DLLの仕様書には、メソッド、イベント、プロパティが記載されており、 外部DLLの発生させるイベントをハンドリングしたいのですがうまくいきません。 「参照の追加」にてDLLを指定し、ソース内で該当DLLのクラスもインスタンス化し、 DLL内のメソッドは使用できています。 イベントに関して仕様書には Event001(Byval arg1,Byval arg2)、Event002(Byval arg1,Byval arg2)、Event003… このように記載されています。 該当DLLのインスタンス化したものをTestClassとして、 Public Event TestEvent Handles TestClass.Event001 という記載では駄目でした。 外部DLLのイベントのハンドリングについて、ご教授頂けましたら幸いです。

  • 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ファイルを使おうと考えています 以上、宜しくお願い致します。

  • VB2005 から DLL を呼び出す

    VB 初心者です。 今、VB の練習ということで VB 2005 Express Edition を使って、個人用ブラウザをつくっています。Web ページの表示は Webbrowser コンポーネントを使っています。 その仕様で、閲覧先によって HTTP Proxy を変更するようになっています。(自分で決めたんですが) いろいろ調べてみると、urlmon.dll の UrlMkSetSessionOption() を呼べば自分のアプリケーション限定で Proxy を変更できるようだ、ということがわかりました。 古い VB など(VB 6 とか?)では、 Private Declare Sub UrlMkSetSessionOption Lib "urlmon.dll" _ (ByVal dwOption As Long, ByVal pBuffer As Any, _ ByVal dwBufferLength As Long, _ ByVal dwReserved As Long) このような感じで宣言するとかあったんですが、VB2005 では Any がダメだとか、 Type INTERNET_PROXY_INFO Dim dwAccessType As Long Dim lpszProxy As String Dim lpszProxyBypass As String End Type で Type はダメだとか、呼び出し側で、LenB を使おうとしたら使えないだとか、INTERNET_OPTION_PROXY の値がわからないなど、問題が山積みです。 上記 DLL を VB 2005 で使ったことがある人がいたら(またはわかる人)、使い方を教えてもらえないでしょうか?

  • VC++のDLLをVB6.0からVB.NETへ移行する方法

    はじめて投稿します。 今、現状VB6.0のプログラムで使用しているVC++のDLLを VB.NETで使用できるように、VB.NETのソースの改修をしています。 (開発環境は、VisualStudio.NET 2003) たいていのDLLは、DllImportを行うことで VB.NETから使用できることを確認しました。 /*--(例)------------------------------------------*/ Imports System.Runtime.InteropServices <DllImport("DLLTest.dll")> _ Private Shared Function DLLTestMethod() As Integer End Function /*------------------------------------------------*/ しかし、苦戦しているDLLファイルがあって、 そのソースを見ると、COMで実装されているようで、 コンパイルしたらタイプライブラリファイルが作成されています。 またDLLのレジストリも登録されているようです。 VB6.0でどう使われているか確認したところ、 そのDLLの参照設定をしていて、 "Public obj As New クラス名"でクラス宣言した後、 obj.関数名()で処理を行っています。 VB.NETでいろいろ試行錯誤してみましたが 参照設定はできるものの、その後で手詰まりになっています。 (参照設定しても、灰色になっているクラス名が存在するので 正しく設定できているかも怪しい状態) (1)----------------------------------------------- 参照設定後、オブジェクトブラウザから見えるクラスをNewして そのメンバ関数を使用する方法 -------------------------------------------------- (結果) レジストリ登録をしていないと 「CLSID{・・・}のCOMオブジェクトが有効でない」云々というエラーに。 それを受けて手動で該当するDLLのレジストリ登録を行った後だと 「オブジェクト参照がオブジェクトインスタンスに設定されません」というエラー。 (ということは、クラス生成に失敗している?) (2)----------------------------------------------- 上記のようにDllImportで実装する方法 (ちなみにそのDLLがエクスポートしている関数は DllCanUnloadNow, DllGetClassObject, DllRegisterServer, DllUnregisterServerの4つ) -------------------------------------------------- (結果) DllGetClassObject以外については関数を呼ぶことができている。 DllGetClassObjectは、引数設定に苦戦して今のところうまくいっていない状態。 (3)----------------------------------------------- インスタンス生成ができていないようなので どこかで調べて見つけてきたCoCreateInstance関数を使用する方法 -------------------------------------------------- (結果) これも引数に何を渡してよいかわからず試行錯誤中。 DLLの読み込みの時点でこけているかと予測して そのあたりが解決すればよいのかな・・・といろいろ試していますが WindowsプログラミングやCOMがよくわかっていないので 何が正解で何が間違っているのかさっぱりわからず、 周りに聞いても精通している人がいないためどうしようもなくなっています。 どんな些細な手がかりでもよいので 突破口になりそうなアドバイスがあれば教えてください。 よろしくお願いします。

  • VC++6.0からVC++.NET2005へ移植

    VC++6.0で作成したプログラムをVC++.NET2005に移植しました。 ビルドを行うと『fatal error LNK1104:ファイル'mfc42.lib'を開くことができません。』のエラーが出てしまいます。 ソリューションのプロパティを見てもどこで「mfc42.lib」の参照を定義しているのか分かりません。 どこで「mfc42.lib」の参照を定義しているのか教えてください。また、対策を教えてください。

  • DLLの利用について

    現在、VCで作成したDLLをVB使うということを行っています。 概要は、VBの方で定義した配列に1~9の数字を代入し、その和を求めるというものです。 DLLに値を渡す際は参照による引渡しをし、DLLで変数の変更を行いたいんです。 しかしその変数の変更がうまくいかないんです。 どこがまずいのでしょうか? プログラム内容は以下に示します。 よろしくお願いします。 *****VBのプログラム***** Option Explicit Private Declare Sub Sum Lib "test.dll" (aa, bb) Private Sub Command1_Click() Dim a(9) As Integer  '1~9の値の代入先 Dim b As integer   '和 Dim I As Integer For I = 0 To 9 a(I) = I + 1 Next I b = 0 Sum a, b  'DLLでの計算 MsgBox (b) '結果表示 End Sub *****DLLの中身***** _declspec(dllexport) void _stdcall Sum(short *aa, short bb) { int i; for ( i=0; i<=9; i++){ bb=bb+aa[i]; } } *****モジュール定義内容***** EXPORTS Sum

  • DLLの利用について

    現在、VCで作成したDLLをVB使うということを行っています。 概要は、VBの方で定義した配列に1~9の数字を代入し、その和を求めるというものです。 DLLに値を渡す際は参照による引渡しをし、DLLで変数の変更を行いたいんです。 しかしその変数の変更がうまくいかないんです。 どこがまずいのでしょうか? プログラム内容は以下に示します。 よろしくお願いします。 *****VBのプログラム***** Option Explicit Private Declare Sub Sum Lib "test.dll" (aa as Integer, bb as Integer) Private Sub Command1_Click() Dim a(9) As Integer  '1~9の値の代入先 Dim b As integer   '和 Dim I As Integer For I = 0 To 9 a(I) = I + 1 Next I b = 0 Sum a, b  'DLLでの計算 MsgBox (b) '結果表示 End Sub *****DLLの中身***** _declspec(dllexport) void _stdcall Sum(short *aa, short bb) { int i; for ( i=0; i<=9; i++){ bb=bb+aa[i]; } } *****モジュール定義内容***** EXPORTS Sum