3

こんにちは、C# の世界は初めてです。マルチキャスト フィードから送信される xceedzip.dll 圧縮データに依存しているため、使用する必要があります。フィードを受信するためのコードをハッキングした後、この dll を呼び出す際のハードルに直面しています。私が理解していることから、「System.Reflection」を使用してdllを呼び出す必要があります。

現在、ソース コードと dll は同じディレクトリにあります。コードは正常にコンパイルされます。

Assembly ass = Assembly.Load("XceedZip");

実行時に System.BadImageFormatException が発生しました: ファイルまたはアセンブリ "XceedZip" またはその依存関係の 1 つを読み込めませんでした。モジュールには、アセンブリ マニフェストが含まれている必要がありました。

助けてください、ありがとう

#

すべての回答のおかげで、tlbimp コマンドに続く dll の動作バージョンが環境にロードされました。Uncompress メソッドの署名に問題があります。ソース (圧縮) オブジェクトと宛先 (非圧縮) オブジェクトとして「ref オブジェクト」と「out オブジェクト」を提供する必要があります。これらの位置にバイト配列をロードしようとしましたが、無効な引数エラーがスローされます。「ref オブジェクト」と「out オブジェクト」についてのヘルプをいただければ幸いです...

問題が解決しました、ありがとうございました

4

3 に答える 3

6

この DLL はマネージ アセンブリではなく、ネイティブ コードを含んでいると思われます。はAssembly.Loadマネージド アセンブリでのみ使用する必要があります。アンマネージ コードから関数を呼び出す必要がある場合は、P/Invokeを使用できます。このプロセスでは、呼び出すアンマネージ関数のマネージ ラッパーを定義します。

たとえば、MessageBoxネイティブ関数を呼び出したい場合 (実際には、同等のマネージ関数が既に存在するため、これを行う必要はありませんが、このデモの目的には問題ありません)、ラッパーを記述できます。

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern MessageBoxResult MessageBox(IntPtr hWnd, String text, String caption, int options);

そしてそれを呼び出します:

MessageBox(IntPtr.Zero, "Text", "Caption", 0);

DLL 内に含まれるアンマネージ関数で同じことを行う必要があります。ドキュメントをチェックして、マネージド ラッパーを定義するのに役立つ正確なアンマネージド シグネチャを確認する必要があります。

于 2012-07-05T12:01:27.580 に答える
0

私が理解していることから、「System.Reflection」を使用してdllを呼び出す必要があります。

いいえ、ありません。プロジェクトに DLL への参照を追加して (マネージ アセンブリであるため)、DLL 内のクラスとそのメソッドを使用できます。

使用するクラスとメソッド、およびそれらが期待するパラメーターに関するドキュメントを受け取ります。

初年度に 640 ユーロ、翌年に 320 ユーロを単なる ZIP ライブラリに支払うつもりはありませんが、それはおそらく少し的外れです。

于 2012-07-05T12:07:37.180 に答える