2016-11-08 3 views
-3

私はすべてのソースコードを持っていない既存のDLLをプロキシしようとしています。私は、Visual Studioプロジェクトを作成し、正常にそれを構築することができた、それを使用して私のdllと他のDLLの署名を一致させるために最低限必要なものは何ですか?

https://github.com/mavenlin/Dll_Wrapper_Gen

:私はここで見つけるツールを使用しています。ただし、元の実行ファイルを実行すると、 "badimageFormatException"の例外がスローされます。ここで別の質問で、何か役に立たないコメントが返ってきたのですが、私はプロキシdllとオリジナルの間の本質的な違いだと思っていました。 corflags.exeツールを使用して

(VSから、またDUMPBINはあまりにも適切な機能を持っているように見えますが、私はそれらを把握することができませんでし)、私は元のために次のような出力が得られます。

C:\Users\jo\fml2>"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\Co 
rFlags.exe" fml.dll 
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 3.5.30729.1 
Copyright (c) Microsoft Corporation. All rights reserved. 

Version : v1.1.4322 
CLR Header: 2.0 
PE  : PE32 
CorFlags : 0 
ILONLY : 0 
32BIT  : 0 
Signed : 0 

私は、プロキシのdllで同じツールを使用している場合は、私はこれを取得:

corflags : error CF008 : The specified file does not have a valid managed header 

私はそれはそれを一致させるために自分のコードに追加する必要がありますか?

+0

これはManaged C++で記述された混合モードの.NETアセンブリです。それは.NET 1.1をターゲットにしており、そのようなアセンブリを構築するにはVS2003が必要です。あなたが気にかけなかった部分は管理されたインターフェースです。 Reflectorのようなまともな逆アセンブラはそれを逆コンパイルすることができます。 –

+0

これは既に説明したとおりです。 DLLは管理されていませんが、ターゲットは管理DLLをロードする必要があります。 –

+0

@HansPassantこれを構築するにはVS2005または2008を入手する方法はありますか?私は両方にアクセスでき、2003年も古代の墓のどこかで失われているかもしれません。 –

答えて

-2

これは部分的な解答に過ぎません。

プロキシdllプロジェクトは、他のDLLと同じ環境/フレームワーク/プラットフォーム内に実際にはないC++ dllとしてビルドします。これはいくつかの合併症を引き起こす。

しかし、他の変更がなければ、Visual Studio内でプロジェクトを右クリックすることができます。必要な設定は、開いているダイアログの最初のパネルにあります。パネルは「General」と「Project Defaults」に分割され、6行目は「Common Language Runtime support」になります。これにはいくつかのオプションがありますが、corflags.exeのメタデータが表示されないようにするには、「サポートなし」オプションが選択されていることを意味します。もちろんそれは変更する必要があります。

正しいCLRランタイムライブラリ/サポートを含めるには手間がかかりますが、まだわかりません。

私は自分の質問に答えています。なぜなら、レギュラーの祝福にもかかわらず、彼らはヘッケル以外のことをしなかったからです。私は彼らが何をやっているのかを実際に知っている人から権威ある答えを好むだろう。

関連する問題