2011-12-27 2 views
5

C#用のhereのサンプルプロジェクトをコンパイルしようとしています。 VS2010に変換する必要がありましたが、うまくいきました。それはビルドされ、実行されますが、DLL関数にアクセスしようとすると終了します。C#DLL実行時エラー - DLL関数を使用しようとすると、ビルド、実行、未処理の例外がスローされます

私はステップを示すために一連のimagesを作った。ご覧のように、私がデザインしたデバイスは接続され、正しく設定されていますが、実際にはそれが問題とは関係ないと思います。

/* 
PLEASE NOTE 
You must add a reference to the FTChipIDNet.dll in order to use this sample 
To do this: 
1. Click on Solution explorer tab. 
2. Right click the References tree. 
3. Choose Add Reference option. 
4. Browse to the FTChipIDNet.dll (as a personal preference I place this in my bin directory) 
5. Click OK 
*/ 

は、私は上記のよう命令とFTChipIDが固定された名前空間への未定義の参照が続く:Form1.csファイル内では、次のコメントは、DLLを使用する方法について説明します。また、GetNumDevices関数が存在することを確認するために、オブジェクトブラウザを手動でチェックしました。あなたは、エラーが、それは、FTChipIDNet FTChipID.dllを必要はないと言い、」思考することができる、今

FTChipID.ChipID.GetNumDevices(ref numDevices); 

:このコード行で

DLLNotFoundException was unhandled:

Unable to load DLL 'FTChipID.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

:ボタンをクリックする

は、このエラーを生成します。 dll。 "私は同じことが不思議です。私は.libと.hファイルと一緒にFTChipID.dllを持っていますが、私はそれらを使用する方法やそれらを見つけるためにこのプログラムのためにする必要がある場所がわかりません。私はFTChipID.dllへの参照を追加しようとしたが、VS2010は、私はそれがいずれかの意味がわからない

A reference to ...\FTChipID.dll could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.

を言いました。何か案は?前もって感謝します。

+0

プロジェクト参照の一部として.dllを追加していますか?あなたもその.dllの名前空間を消費しています..また、.dllが.dllの場合は必要に応じて.dll ..またはGACのバージョン管理を調べます.net 2.0 - 3.5 .dllと.net 4.0 .dllも見てくださいプロジェクトのプロパティ設定でそれが4.0プロジェクトであることを確認します。3.5プロジェクトとしてもコンパイルして、違いを確認します。 – MethodMan

+0

プロジェクトの出力としてFTChipID.dllを追加します。 bin \ Debugフォルダー)、再試行してください。私はFTChipIDNetを推測する。dllは前者のラッパーです。 – rene

+0

FTChipID.dllをFTChipIDNET.dllと同じディレクトリに配置します。フレームワークはそれを見つけることができるはずです。 –

答えて

2

FTChipIDNet.dllがFTChipID.dllのラッパーであるあなたの\ WINDOWS \ system32ディレクトリの両方にコピーし、 FTChipID.dllがbinフォルダにあります.FTChipIDNet.dllが配置されます。

両方のDLLは、ソリューションのbinフォルダにあり、Windows \ system32には配置しないでください。

+0

ありがとう。これは少なくとも異なるエラーを引き起こしました。既存のアイテムとしてFTChipID.dllをプロジェクトに追加した後、VS2010はデバッガを実行している間にそれを見つけることができました。新しいエラーは私のOPの下のコメントにあります。 – Anthony

+0

新しいエラーメッセージに役立つリンクがあります。 http://stackoverflow.com/questions/2023766/an-attempt-was-made-to-load-a-program-with-an-incorrect-format-even-when-the-p – Leons

+0

リンクをありがとう。このリンクを読んで、FTDIがFTChipID.dllの64ビット版をリリースしたかどうかを尋ねてきました。 20分足らずで、私は応答を得ました! 「現在、FTChipID.dllの64ビット版は提供されていません。32ビット版のコンパイルを行うユーザーは、32ビット版と64ビット版の両方でうまく動作すると言われています。だから、私は32ビットのビルドを使用する必要があるように見えます。 VS2010 Expressはこれをオプションとして提供していませんが、その部分を理解していきます。みんな、ありがとう! – Anthony

0

複数の .dllのように聞こえます:FTChipIDNet.dll(あなたが使用するインタフェース)とFTChipID.dll(実際のCOM以外の非Net機能を持つもの)の両方です。あなたは両方が必要です。

提案は:コピーし(あなたが上記したよう)あなたがあなたのソリューションへの参照を追加する必要があるので、

+0

あなたは彼に両方のGACを持っているか両方をコピーしているのですか?あなたの反応について興味があるだけです。 – MethodMan

+3

アプリケーションファイルは、ほとんどSystem32ディレクトリに属していません。 –

+0

はいこれは、おそらくドライバシステムの関連部分のためにsystem32フォルダにあります。オリジナルのFTDIドライバーのデザインに従って保管してください。 C:\ windows \ System32 \ FTChipID.dll 隣人のDLLもそこにあるので、私はこれを言う。C:\ windows \ System32 \ ftd2xx.dll – hamish

2

ビルドを使用してVS2013にFTDIサンプルプログラム "CSChipID"を作成しました。 "Any CPU"。 2つのDLLファイル "FTChipID.dll"と "FTChipIDNet.dll"がbinディレクトリにコピーされましたが、最初のDLL関数 "FTChipID.ChipID.GetNumDevices(ref numDevices);が呼び出されたときにエラーが発生しました。この修正は、ビルドを次のように "x86"に変更することです。

ビルド - コンフィギュレーションマネージャー アクティブソリューションプラットフォーム - 「x86」 注:「x86」が使用できない場合は、「New ...」を選択して「x86」を選択します。

+0

ああ、ありがとう、これも私の問題の原因だった、私は私の.netプログラムのデバッグビルドを持っていた。私はVisual Studio x86とリリース構成で再構築したときにうまくいった。ビジュアルスタジオコンパイラにはある種の問題でなければなりません。 DLLに問題はありません。私はすでにFTchip.dllを自分のc:\ windows \フォルダに持っていて、以前はすでに動作していたからです。 – hamish

関連する問題