VB2008でDLLの取込みできない

このQ&Aのポイント
  • VB2008Expressが無料配布していたので始めたばかりの初心者です。
  • 玄人志向の学習リモコン「KURO-RS」(PC-OP-RS1)を操作するアプリを作ろうと試みていますが、DLLの取り込み方がわかりません。
  • 参照の追加を行ってもエラーメッセージが表示され、DLLを取り込むことができません。
回答を見る
  • ベストアンサー

VB2008でDLLの取込みできない

VB2008Expressが無料配布していたので始めたばかりの初心者です。 玄人志向の学習リモコン「KURO-RS」(PC-OP-RS1)を操作するアプリを作ろうと試みているのですが、付属のSDKや下記コントロールDLLのVB2008への取り込み方がわかりません。 「PC-OP-RS1-CONTROL.DLL」 http://1c3.world.coocan.jp/wiki/ (「2008-06-08コントロールDLLを作ろう」にあります。VC++ソースもあります) 『参照の追加』を行っても「’~.dll’への参照を追加できませんでした。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください」とメッセージが出て取り込むことができませんでした。

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

  • ベストアンサー
  • ttkai00
  • ベストアンサー率58% (18/31)
回答No.1

DLL と呼ばれるものにも何種類かあります。 (1) ネイティブDLL (Win32 の DLL) (2) ActiveX DLL (3) マネージドDLL 単に DLL と書かれていれば、(1) を指すことが多いです。そして、VB2008 から参照設定して使用できるのは (2) と (3) だけになります。おそらく参照しようとした DLL は (1) のタイプなのだと思います。 (1) のタイプのDLLの関数をVB2008から使用するには、プラットフォーム呼び出しという技術を使用します。MSDNの以下のページなどが参考になると思います。 http://msdn.microsoft.com/ja-jp/library/26thfadc.aspx http://msdn.microsoft.com/ja-jp/library/42b9ea93.aspx

morokazu
質問者

お礼

ttkai00さんありがとうございました。 プラットフォーム呼び出しでうまくいったようです。 また何かありましたら宜しくお願いしますm(__)m

関連するQ&A

  • VB2010で作成したdllからtlbが作れない

    VB.NETで作成したDLLをExcelのVBAから呼び出すということをやっています。 VB2007のときはよかったのですが、VB2010にしてからうまくいかなくなりました。 具体的には、コンパイルしてClassLibrary1.dllファイルを作成してから C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe ClassLibrary1.dll /tlb:ClassLibrary1.tlb /codebase を実行すると、 ClassLibrary1.dllは有効な.NETアセンブリではないため、読み込めませんでした。 となります。 ClassLibrary1の「アセンブリをCOM参照可能にする」にはチェックを入れています。 おわかりの方がいらっしゃいましたら、どうぞよろしくお願いいたします。

  • VB.NETでDLLを読み込ませる時にエラーがでる

    VB.NET DLLがついているプログラムで、他のパソコンで動作確認済みの物を頂いたのですが、動きません。 ■現象 (1)VisualStudio .Netでソースを開きます。 (2)ソリューションエクスプローラの参照設定から****.dllを削除します。 (3)メニューのプロジェクトで参照の追加を選択します。 (4)参照の追加画面でCOMタブを選択します。 (5)参照ボタンをクリックし、System32フォルダ内より****.dllを 選択します。 (6)「選択されたコンポーネント」のリストにに****.dllが存在することを 確認 (7)OKボタンをクリックします。←ここでエラーがでます ■エラー 『'C:\WINDOWS\system32\xxxxxx.dllへの参照を追加できませんでした。タイプライブラリを読み込めませんでした。タイプライブラリ/DLLの読み込みエラーです。』 どなたか教えてください><めちゃくちゃ困ってます

  • VB2010でPC-OP-RS1を読み出すとエラー

    PC-OP-RS1をカスタム利用するDLL、pc-op-rs1-control.dllをVB2010から利用しようとしています。 PC-OP-RS1 - PukiWiki http://1c3.world.coocan.jp/wiki/index.php?%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EBDLL%A4%F2%BA%EE%A4%ED%A4%A6 しかし、宣言での引数の指定の仕方が悪いらしく、エラーが出てしまいます。 こちらも参考にしてみました。 http://okwave.jp/qa/q4511807.html このDLLをモジュールで以下のように宣言をして読み出しています。 Public Declare Function remo_close Lib "pc-op-rs1-control.dll" _    Alias "Close" () As Integer closeのように、引数の無いものはうまくいくのですが、引数のある読み出し、例えばOPENを Public Declare Function remo_open Lib "pc-op-rs1-control.dll" _ Alias "Open" (ByVal port As Int32) As Integer このように宣言して  ans = remo_open(1) のように使用すると、 WindowsApplication1.Module1::remo_open' がスタックを不安定にしています。PInvoke シグネチャがアンマネージ ターゲット シグネチャに一致していないことが原因として考えられます。呼び出し規約、および PInvoke シグネチャのパラメーターがターゲットのアンマネージ シグネチャに一致していることを確認してください。 とエラーが出てしまいます。 Int32が悪いかと思い Int16、Int64、UInt32、UInt16、UInt64、Integer、UInt、ByValをByRefにと試してみましたが同様でした。 DLLのソース(C++)では以下のように宣言されています。 PCOPRS1CONTROL_API PCOPRS1CONTROL_RET Open(int port_no) { return(ConvertErrorsFromDevPcoprs1(dev.DEV_Open(port_no))); } 唯一エラーが出なかったのが、 Public Declare Function remo_open Lib "pc-op-rs1-control.dll" _ Alias "Open" () As Integer でした。 どなたか、間違いと思われる部分がわかる方、ご指摘をお願いいたします。

  • C#のコントロールdllをVBツールボックスに追加

    宜しくお願いします。 現在、C#で自作のカレンダーを開発し 自作カレンダーをVBのツールボックスへ登録し Formへデザイン(追加)しようとしております。 テストの段階では、テスト用のプロジェクトから dllを参照しnewすることで表示ができておりましたが ツールボックスから貼り付ける形で使用したいということで 調べて色々試しております。 ・ツールボックスのアイテムの追加で.NET Framework の一覧に表示がされない ・ツールボックスのアイテムの追加 > 参照ボタンでdllを指定すると  「ツールボックスに含めることのできるコンポーネントは何もありません」  のエラーが出る ・ネットで調べ、GACへの登録を試しましたがgacutil.exeがPCの中にない ・コマンドプロンプトでコマンドを実行( gacutil /i calendar.dll )し、  レジストリには登録されているが一覧には表示されない という現状です。 ・dllのプロジェクト設定でCOM相互運用機能の登録にチェック。効果なし ・dllのプロジェクト設定でアセンブリをコム参照可能にするにチェック。効果なし ・追加する側、AutoToolboxPopulate を [true]に設定。効果なし という現状です。 そこで質問なんですが ・dll側で必要な設定やコード等があるんでしょうか? ・追加する側で必要な操作等はありますか? ご教授宜しくお願い致します。

  • C++でのDLL利用について

    http://1c3.world.coocan.jp/wiki/index.php?%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%EBDLL%A4%F2%BA%EE%A4%ED%A4%A6#p92ca3d9 こちらのページで公開されている、pc-op-rs1-control.dllを使って、 自作プログラムを製作しようと考えています。 開発環境はVisual C++です。 上記ページのAPIリファレンスを見ると、 例えばドライバをオープンする関数は PCOPRS1CONTROL_RET Open(int port_no) というように書かれています。 そこで私の書いてみたプログラムは以下のとおりです。 #include <Windows.h> typedef PCOPRS1CONTROL_RET(WINAPI *OPEN)(int port_no); int _tmain(int argc, _TCHAR* argv[]) { HINSTANCE lib; lib = LoadLibrary(TEXT("pc-op-rs1-control.dll")); //dllはEXEファイルと同じディレクトリに配置 if (lib == NULL){ // ここにはエラーメッセージを入力してください printf("dll呼び出しエラー\n"); return -1; } OPEN Open = (OPEN)GetProcAddress(lib,"open"); printf("実行開始"); PCOPRS1CONTROL_RET open = Open(7); if(open == PCOPRS1CONTROL_RET_OK) printf("Open成功"); bool End = FreeLibrary(lib); return 0; } こうすると、 PCOPRS1CONTROL_RETという型が宣言されていない(?)ので、 コンパイルが通りません。 試しに typedef void(WINAPI *OPEN)(int port_no); としてみたりすると、 Open()を実行した瞬間死にます。 pc-op-rs1-control.dllのソースを見ても、 PCOPRS1CONTROL_RET型についての明記が見当たらないような気がするのですが、 どうしたらいいのでしょうか?

  • VB6.0 ExeとDllの違い

    いつもお世話になっております。 今更ながらなのですがVB6.0について質問させて下さい。 新規でVB6.0を起動すると、「標準Exe」・「ActiveXExe」・「ActiveXDll」・「ActiveXコントロール」等がでてきますよね? 普段アプリを開発する時は「標準Exe」しか使用しないのですが、「ActiveXExe」・「ActiveXDll」・「ActiveXコントロール」の違いは何なのでしょうか?(どういうときに使い分けるのでしょうか?) ActiveXDll・・・ソースコードのみ?参照設定する?(クラスやモジュールと何が違うのでしょうか?) ActiveXコントロール・・・独自のコンポーネント(部品)を作る?(OCXのようなものでしょうか?) ActiveXExe・・・(一番分かりません) どなたかご教示お願いします。

  • 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 ファイルがみつかりません」と表示されます。「参照の追加」から参照しようとしても「このファイルは参照できません。」をエラーがでてしまいます。 直すべき点はどの部分なのでしょうか? ご教示ねがいます。

  • VBAで呼び出したVBのDLLのデバッグ方法

    VB2010で、COM相互運用機能を使って作成したDLLを VBAから呼び出すことはできるのですが この状態でこのDLLをデバッグすることはできないでしょうか。 本来ならば、DLLをデバッグするテストプログラムを VB2010のVB.NETのWindowsフォームアプリケーションか ConsoleApplication1で作成して、 同じソリューションの中に DLLとテストプログラムのプロジェクトを配置して 参照の追加でDLLを参照設定して 両者をデバッグをすると思われますが、 テストプログラムを作るのがかなり大変なのと、 今回作成したDLLは、元々はVBAの中のひとつのプロシージャ―で、 事情があって、このプロシージャ―だけをVBのDLLにしたものです。 このプロシージャ―は元々はVBAの中で正しく動作していたものです。 VBに書き直した時に何らかの不具合が起きていると思われます。 テストプログラムを作らずに、既存のVBAから呼び出して、 DLLの部分の動作だけを(できればVB2010で)デバッグできないでしょうか。 よろしくお願いします。 (WindowsXP SP3 , Excel2003のVBA , Visual Studio 2010)

  • DLL VB Wheel ホイール

    VB6で、アクティブでない(フォーカスのない)コントロールの上に マウスポインタを持ってきて、ホイールが効くようにしようとしてます。 ネットで検索したところ、NYWheelなるものが以下のサイトに、 フリーで、しかもソース付でありました。 http://park1.wakwak.com/~y-nagano/Programs/nywheel/ どうやら、そのサイトにあるDLLをVB6で参照し使用すれば、 目的の事が出来るのではないかと思い、ソースを読もうとしたところ、 VC++の様で、僕には理解できませんでした。 (一応、VCで作ったDLLをVBで読むようにする事が書いてあるサイト http://www.h4.dion.ne.jp/~fht/htmkdll/ を見つけ、試してみましたがお手上げでした。) そもそも、そのDLLがVBで使えるのかどうかもわかりません。 ソースを修正したら、VBでも使える様になるのでしょうか? 納期も迫っているので、回答しようにも分からないので困ってます。 環境はWindowsXP(SP2)+VisualStadio6(SP5)です。

  • VB .NetのDLL参照について

    名前付パイプの処理をしているのですが、DLLが参照できません。 Public Class ClsJi01   Public Declare Function MakePipe Lib "\DLL\Point.DLL" (ByVal pipe_name As String, ByVal buf_size As Integer, ByVal max_instances As Short, ByVal hpipe As Integer, ByVal err_code As Integer) As Integer  Public Sub M_Pipe()   Dim r As Integer   Dim rpipe As Integer   Dim err_code As Integer   r = MakePipe("\\.\pipe\RS04", 255, 16, rpipe, err_code)  End Sub End Class Point.DLLは以前VB6.0の時に使用していたDLLで自作です。 これで実行すると「オブジェクト参照がオブジェクト インスタンスに設定されていません。」と出ます。 どうしたら良いのでしょうか?

専門家に質問してみよう