- ベストアンサー
VB2008でのDLL作成方法について
はじめまして、はじめて投稿します。 初心者なので変な質問をしていたらすいません。VB2008を使用しています。 VBで作成したDLLファイルをLabviewで使用したいと思っています。 ただVB6.0でActiveX DLLを作成する方法はわかるのですが、VB2008で作成する方法がわかりません。 クラスライブラリでプログラムを作成し、DLLにすることはできるのです・ しかしレジストリに登録しようと思い「regsvr32 ファイルのパス**.dll」と入力したところ「**.dllは読み込まれましたが、DllRegisterServerエントリポイントが見つかりませんでした」と出ます。 調べてもVB2008でのActiveX DLL作成方法が見つからなくて困っています!!! わかるかた、よろしくお願いいたします。
- hashiken12
- お礼率100% (6/6)
- Visual Basic
- 回答数4
- ありがとう数4
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
GENGUIDはVB2008のインストールフォルダーにあると思いますので 以下の手順でツールに登録してみましょう ツール > 外部ツール > 追加(A)をクリック タイトルに『GENGUID』 コマンドの右端の『...』ボタンをクリック 開いたダイアログのフォルダーを1階層上がってToolsを選択 ここに『GENGUID.EXE』があるのでこれを選択して『開く(またはOK)』 初期ディレクトリに コマンド部分の GENGUID.EXEの手前までをコピーして 貼り付け OKをクリック といった手順でいいでしょう
その他の回答 (3)
#2 です。ご返信遅くなりましたが、 >もともと自分で保存場所を指定しているのですが大丈夫でしょうか?(D:\kenkyu\***等) >初歩的なことなのかもしれませんが、もしお時間があればもうすこし詳しい説明をお願いできませんでしょうか? コマンドプロンプトを起動し、 cd C:\Windows\Microsoft.NET\Framework\xxxxx と入力します(xxxxx は.NET のバージョン番号)。 次に、 regasm.exe (あなたの作ったdllファイルのフルパス) /codebase でレジストリ登録できますよ。 regasm.exe /unregister (あなたの作ったdllファイルのフルパス) で解除です。
お礼
ありがとうございます!無事動きました!!!
No.1 さんが詳しい回答をしてくださっているので、レジストリ登録について追記します。regsvr32 の代わりに regasm.exe を /codebase オプション付きで行ってください。 (C:\Windows\Microsoft.NET\Framework\xxxxx 下 xxxxはバージョン) 厳密な署名をしない場合警告が出ますが、無視しても動作します。 64 bit用ビルド版(x64)を使う場合は、regasm.exe が 32bit 版と同名でも 64bit 専用版で別ファイルになりますので注意が必要です。
お礼
お早い回答、ありがとうございます。 えっと、本当に初心者で申し訳ないのですが、 >/codebase オプション付きで というのがわかりません・・・・ もともと自分で保存場所を指定しているのですが大丈夫でしょうか?(D:\kenkyu\***等) 初歩的なことなのかもしれませんが、もしお時間があればもうすこし詳しい説明をお願いできませんでしょうか?
- redfox63
- ベストアンサー率71% (1325/1856)
VB2008のエディッションは何でしょう? 完全なCOMオブジェクトの生成はVB2008では無理なのですが COMとして機能を公開することは可能です .NET アセンブリとしてライブラリ(DLL)を構築して COMとしてのインターフェースやイベントを公開するといったやり方です 詳細は VB2008付属のMSDNで 『チュートリアル : Visual Basic 2005 での COM オブジェクトの作成 』 などを検索してみてください 1) Windows用のクラスライブラリプロジェクトを新規に作成 2) メニューから プロジェクト > 新しい項目の追加 > テンプレートで『COMクラス』 3) 必要なプロパティやメソッドを追加 4) コンパイル 5) ライブラリをテストするWinEXEプロジェクトを実行 といった形でライブラリが登録されると思います テンプレートの『COMクラス』がない場合は 1) クラスライブラリとしてプロジェクトを作成 2) メニューから プロジェクト > (クラスライブラリの)プロパティ > アプリケーションタブの『アセンブリ情報(Y)』をクリック > 『アセンブリをCOM参照可能にする』にチェック 3) コードウィンドウで Public Const ClassId As String = "" Public Const InterfaceId As String = "" Public Const EventsId As String = "" を記述しておき ツール > GUIDGEN を実行 4の『Register Format』を選択して COPY VBに戻って Public Const ClassId As String = "" の ""の中にキャレット(カーソル)をおいて Shift+Insertで貼り付け { }を削除 同様の手順で InterfaaceIdやEventsIdを設定 4) 必要なプロパティやメソッドを構築 といった手順で行ってみてください regsvr32による登録/解除葉出来ないようですが ・・・
お礼
お返事、ありがとうございます!早くてびっくりしました!! >VB2008のエディッションは何でしょう? VB2008 Express Editionというものを使用しています。 テンプレートの「COMクラス」が見つからなかったので2つ目の方法を行おうと思ったのですが、「アセンブリをCOM参照可能にする」をチェックするところまではできました。 でも3)からがよくわからなくて、 >コードウィンドウで のコードウィンドウとはプログラムを書く箇所でいいんですか? >ツール > GUIDGEN を実行 4の『Register Format』を選択して COPY とありますが、メニューのツールに上記のようなものがありません。 わたしの設定方法がおかしいのでしょうか?
関連する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ファイルを使おうと考えています 以上、宜しくお願い致します。
- ベストアンサー
- Visual Basic
- regsvr32.exe による DLLの登録について
質問は2つあります。以下、よろしくお願いします。 1.通常DLLはレジストリに登録しなくても使用できますが、どういう場合に登録が必要なのでしょうか? 2.regsvr32 xxx.dll を実行したところ、以下のようなエラーとなってしまいました。正しく登録するにはどうしたらいいのでしょうか? xxx.dll は読み込まれましたが、DllRegisterServer エントリポイントが見つかりませんでした。このファイルが登録されていない可能性があります。 以上、よろしくお願いいたします。
- ベストアンサー
- Windows系OS
- DLLをREGSVR32しないで利用する方法について。
こんにちは。 Visual Basic 6.0でActiveX DLLを作成しました。 REGSVR32で登録して正常に利用できていますが、 レジストリを使わないで動かしたいと思っています。 フリーソフトではレジストリを使わないで動かせるものがありますが、あのようにするにはどうすればよいのでしょうか。 基本的には、exeファイルとdllファイルを同じフォルダへ置いて動けば良いと思っています。 調べるとLoadLibraryを使えば出来そうに書かれていますが、ご存知の方アドバイスを宜しくお願い致します。
- ベストアンサー
- Visual Basic
- 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がよくわかっていないので 何が正解で何が間違っているのかさっぱりわからず、 周りに聞いても精通している人がいないためどうしようもなくなっています。 どんな些細な手がかりでもよいので 突破口になりそうなアドバイスがあれば教えてください。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- DLLのVB6.0から.NETへのアップグレードについて
お世話になります。 WinXPの環境にて、 VB6.0で作成されたDLLを.NETにバージョンアップさせようとしているのですが、 regsvr32コマンドを使用してDLLを置き換えようとすると、 以下のようなエラーメッセージが出てしまい、実行時もエラーになってしまいます。 ⇒「C:\○○\○○.dll was loaded, but the DllRegisterServer entry point was not found. DllRegisterServer may not be exported, or a corrupt version of C:\○○\○○.dll may be in memory. Consider using PView to detect and remove it.」 DLLを呼び出しているEXEの方は6.0のままなのですが、 そもそもEXEの方も.NETにバージョンアップさせないといけないのでしょうか? 本などで片っ端から調べて見ましたが、技術的に可能なのかどうかも分からない状況で困っています。 原因・解決方法等をご存知の方がいらっしゃいましたら、 どうぞ宜しくお願いいたします。
- ベストアンサー
- Visual Basic
- VB(6.0)で作成したDLLをVB(.Net)で呼び出す方法
VB(6.0)で作成したDLLをVB(.Net)で呼び出すのに Public Declare Function 関数名 Lib "~.dllのパス" (ByVal ・・・) As 型 このように呼び出してみているのですが 上手くいきません。整数データの変更も しました。 このDLLを呼び出せないと次に進めないので 本当に困っています。 よろしくお願いします。
- 締切済み
- Visual Basic
- VB6.0exeから.NETのDLLを呼び出した場合の実行時エラー’429’について
お世話になります。 環境はWindowsXPです。 現在、VB6.0のexeから.NETのDLLを使用する・・・というのをしています。 以下の手順を踏み、実行してみたのですがどうも上手く行きません。。。 (1).NETのDLLを作成 (2)COMとして利用するために、.NET 2003コマンドプロンプトから「regasm」コマンドにてレジストリに登録 (3)tlbexpコマンドで、タイプライブラリを作成 (4)VB6のプロジェクトから(3)を参照設定する (5)VB6から.NETクラスを生成し、呼び出す (6)プロジェクトをコンパイルし、exeを生成 この手順にて実行すると「実行時エラー'429'ACtiveXコンポーネントはオブジェクトを作成できません」という エラーメッセージが出てしまいます。 windows updateをしてみたり、VB6.0のランタイムをインストールしてみたりしたのですが、 どうもダメみたいで困っています。 解決方法などご存知の方がいらっしゃいましたら、 ご教授いただけると大変助かります。 よろしくお願いいたします。
- 締切済み
- Visual Basic
- VB6で作成したDLLをVC6で使用する方法
VB6で作成したDLLをVC6で使用できなくて困っています。 以下にトライしたことを示します。 (1) VB6でTRUEを返すだけの関数を入れたActiveX DLLを作成 (2) VC6のLoadLibraryに成功(戻り値がNULL以外) (3) VC6のGetProcAddressに失敗(戻り値がNULL) (4) VC.NET付属のDumpbinユーティリティでは(1)で作成した関数が表示されない。 何が悪いのでしょうか。 宜しくお願いします。
- ベストアンサー
- Visual Basic
- LabviewとDLLについて
はじめまして 私のパソコンにはVB6.0が入って無く、他のPCにあるVB6.0を用いて作ったDLLファイルをLabviewでプロパティーノードから呼び出して使おうと思ったら、 「このノードに渡されていないRefnumクラスは完全に定義されていません。これはRefnumが外部ファイルを使用することで定義されて、これらファイルの一つまたは複数のファイルが見つからないからです。 」 と出ました。 regver32で登録もしております。 やはり他のPCで使用したDLLファイルでは無理なのでしょうか? もしわかる方がいましたら、ご回答よろしくお願いいたします!!!!
- ベストアンサー
- Visual Basic
- DLLの登録をVBで行いたい(VB2005)
いつもお世話になっております。 VB2005で開発しています。 DLLを登録するときに、コマンドプロンプトから regsrv32 ファイル名.dll と実行すると思います。 これをVBから行いたいのですが、何か良い方法はございませんか? 具体的には、VBでレジストリ登録するファイルの一覧を出力して、 それをレジストリ登録したいのです。 VBとバッチを組み合わせれば、実現可能なのですが、 ファイルを2つに分けたくないので、VBだけで処理できないものかと 思いました。 コマンドプロンプトで実行するコマンドをVBから同じように実行できれば良いのですが・・・ もしよろしければ、ご教示ください。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
お礼
返信ありがとうございます! とてもわかりやすく、手順通りに行うことができました。 ほんとうにありがとうございます。 ただやっぱりレジストリ登録がうまくいかないようです。