開発環境を2008にすると、新しいDLLなどを使うのでwin2kなどで動かなくなると嫌なので、しかし2005はvistaとかで上手く動かないのでどうにかしたい。
プラスCシャープでアプリを作って32ビットDLLを読み込むと64ビットで動かなくなるのでどうにかしたい。
2005CSで空のプロジェクト”MyApp”を新規作成
保存する”C:\T\MyApp”
プロジェクト”MyApp”を削除する。
2005CSを閉じる
フォルダ”MyApp”を削除する。
MyApp.slnの所に2005というフォルダをつくりこのソリューションファイルを移動する。
移動したMyApp.slnを開く。
新しいプロジェクト”MyAppLib”をつくり、C:\T\MyApp に保存する。
AssemblyInfo.csとClass1.csをどっかにコピーしてから削除する。
2005CSを閉じる
MyAppLib.csprojをソリューションファイルと同じところに移動する。
ソリューションを開き、利用不可になっているMyAppLibを削除する
既存のプロジェクトをついかで、2005\MyAppLib.csprojを追加する。
既存の項目を追加で、とってあったAssemblyInfo.csとClass1.csをC:\T\MyApp\MyAppLibの下に戻して追加する。このときcsprojの下にコピーする。slnやcsprojのあるところにはcsファイルは置かないので、csprojを直接編集する。
2005CSを閉じて、エディタでMyAppLib.csprojを開いてファイル名らしいところを、..\MyAppLib\Class1.csなどと編集する。
ソリューションを開いてちゃんとファイルが開けるか確認。
MyAppLibの参照に”System.Windows.Forms”を加える
プロジェクトMyAppLibにあたらしいフォームを追加する。
この時もcsprojの下につくるので上記のように頑張って移動する。
Class1にメイン関数MyMain()を追加する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; namespace MyAppLib { public class Class1 { public static void MyMain() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } |
ソリューションに新しいプロジェクト”MyApp”を追加する。
プロジェクトMyAppのForm1を削除する。
Resources.resxとSettings.settingsを削除。
MyApp.csprojを2005に移動して、エディタで開いて、ファイル構成が同じになるように色々頑張る。
MyAppの参照にプロジェクトMyAppLibを加える。
MyAppのMain()を書き換える。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; using System.Collections.Generic; using System.Windows.Forms; namespace MyApp { static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { MyAppLib.Class1.MyMain(); } } } |
MyAppがちゃんと動くか確認。2005の下に変なファイルを作らないか確認。
次に2005を2008ファルダにコピーする。
2008\MyApp.slnをVS2008CS Expressで開いて頑張る。
32ビットで起動するためのexeをVC2005EEでつくる。
VC2005EEで新しいフォームアプリMyApp32をつくり、フォームやアイコンを削除して、参照にMyAppLib.dllを加えて、main()を書き換える。
1 2 3 4 5 6 7 8 9 |
// MyApp32.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" [System::STAThreadAttribute] int main(array<System::String ^> ^args) { MyAppLib::Class1::MyMain(); return 0; } |
これでMyAppLibが32bitDLLを使っていても64bitから起動できる