単一の.cppファイル(ネイティブコードとマネージコードの両方を含む)をより大きなC#プロジェクトに結合することに興味があります。数行のコードでDLL全体を「無駄にする」のはばかげているように見えるため、またコードにはセキュリティ機能があり、難読化したいため、CPPコードに個別のDLLを使用したくありません。より大きなアセンブリ内にそれを隠すことによってビット。(そして、誰かがそれを提案する前に、ILmergeまたはALはネイティブコードでは機能しないため、使用できません。)
.cppおよび.csファイルのグループをコンパイルする基本的なプロセスは数回カバーされています。主要な候補者の提案は次のようです。
- http://blogs.msdn.com/b/junfeng/archive/2006/05/20/599434.aspx
- http://blogs.msdn.com/b/texblog/archive/2007/04/05/linking-native-c-into-c-applications.aspx
ただし、これらの両方(および私が見つけたすべての関連リンク)は、コマンドラインでの構築のみを扱います。
既存の.csprojファイルを変更してC++コードでコンパイルおよびリンクすることをお勧めします(C ++ビルド自体が別の.vcprojにあることは問題ありませんが、そうでない場合は良いですが、リンクは.csprojにある必要があります)、そしてすべてをVS2008内からビルド可能にして、プロジェクトのユーザーが違いを知る必要がないようにします。
残念ながら、VSによってコンパイルされている.csproj内からlink.exeを正常に呼び出すことができないようです。「link」を含む「Exec」要素は、PATHにないため、実行可能ファイルを見つけることができません。場所を明示的に指定すると( "$(DevEnvDir).... \ VC \ bin \ link")、実行が開始されますが、必要なライブラリを読み込めないことを示すエラーコードですぐに失敗します(おそらく、 PATHにはありません)。
Visual Studio内からcsprojからLINKへの呼び出しが成功した例はありますか?
編集:わかりました、私は今その問題を回避することができました、そしてすべてがコンパイルされ、リンクされ、そして正常に実行されています-リリースモードで。デバッグモードでも正常に実行されているように見えますが、何らかの理由で、そのSxSマニフェスト(LINK
生成されますが、を介して手動で適用する必要がmt
ありました)は、DebugCRTではなくリリースCRTのみを参照します。それを修正する方法はありますか?