2012-02-12 5 views
3

すぐにそれを押してください!これはすでに何百万もの時間が掛かっていると思うかもしれませんが、地球が太陽の周りを回っている間に何度も答えられましたが、私にこのことを教えてください。アンマネージドコードからマネージコードを実行する方法は?

私のタスクは単純です:私のC++(Windows)プログラムでは、管理された(C#またはVB.NETなど)コードを実行できるようにしたいと考えています。

待機!あなたの前にCTRL-Tは、Googleからのランダムなリンクを取得し、私の顔でそれを平手打ちし、言って行く、続けてください読書「検索を学ぶ!」:私はここにhttp://sites.google.com/site/robertgiesecke/ 私はC#のをエクスポートすることができ、そこから始まっ

Cスタイルの関数として機能し、C++で使用します。それは大丈夫です。しかし、私はネイティブのexeのマネージdllという2つのバイナリを持っています。

dllをexeに埋め込んでメモリにマップし、最後にそこから呼び出すことはできますか?言い換えれば、ネイティブのexeと管理されたdllの両方を含む単一のexeだけを持っていたいのです。

私はすでにこれを試しました。http://www.joachim-bauch.de/tutorials/loading-a-dll-from-memory/
残念ながらそれは動作しません、コードは最後に "attach"プロセスを完了できません。私はそれがDLLの管理されたフォームのためだと思います。

読んでいただきありがとうございます。

EDIT:私は本当にあなたが作成しようとしているどのようなすべての手段:(

+2

独自のIHostAssemblyManagerとIHostAssemblyStoreの実装を提供できるように、自分でCLRをホストする必要があります。 Gieseckeのハックも不要にします。 –

+0

それは問題を完全に釘付けにしました:Dそれを答えとして投稿して、それをマークします。 – user25101622

答えて

0

によってC++/CLIを使用したくないあなた場合にのみ作成することができ、「混合モード」アセンブリでありますVisual Studioで "Managed-C++"アセンブリ/実行可能ファイルを作成する

私の長年の経験から、C#/ VB.NETはこれをサポートしていませんが、間違っていてもVisual Studio C#ではなくC#を使用しています。

0

ここでお試しいただいていることは、セキュリティ上の懸念から本当にサポートされていないものです。あなた自身のデータブロックを実行しようとしています(nx(実行していない)フラグでマークされている可能性もあります)。過去に似たようなことを試してみました(DRMの理由から、「decompilersを避ける」 - 私は制限付きDRMのファンではありません)。これは可能ですが、ターゲットマシンのセキュリティ設定によっては使用するPITAやエラーが発生する可能性があります。できるだけそれを避けてください。

ブログのコードは本質的に正しいアプローチを使用していますが、コードは管理されていないライブラリのみで動作します(既に気付いているように)。これは、管理されたライブラリと実行可能ファイルが構築される方法によるものです(基本的に、実行可能ファイルを実行するための小さなネイティブスタブがありますが、ライブラリには存在しません(したがって、そのアプローチに必要なネイティブエントリポイントはありません)) 。

関連する問題