自分用メモ

まだいろいろと再構成中。

タグ: VisualStudio

要するに、ここここにあるようなふうに、XamarinをWindows10上のVisual Studioで動かして、別筐体のMacとつないで、Windows10上のVSからiOSを開発してみる・・・という挑戦。

この記事にあるような、Mac上でWindowsを動かすのではなく、物理的に別筐体のMacの中古を激安で買って、繋いでしまおうという。なので、場所を食わないMac miniの中古。16000円弱で入手したので、その価格は満足。

で、ちゃんとうまく行くかは別問題。

まず、Mac OS X にWindowsから VNCでリモートデスクトップ接続するのはいいんですよ。こちらのサイト様にあるとおりでOK.

で、次に、いよいよVisual StudioのXamarinから繋いでみる。
すると、sshフィンガープリント・・・リモートログインは有効とかいうのが出てきてトラブるけど、これは、マックにログインするときに、ちゃんとパスワードつきのアカウントを作成してログインして、そのアカウントでログインすれば大丈夫。こんな感じ。
001

Mac上ではこのように、リモートログインを設定しておく。
002

こうすれば、ssh....は出なくなるのでうまく行くかと思いきや・・・こういうのが来る。
003

Xcodeってなんだ?って調べると、ここここですよ。
なんか、Apple IDが必要になるそうで、そんなの昔に入ったような気がしないでもない・・・と、不完全なので、いろいろ苦労してようやく昔作ったアカウントとそのパスワードを探し出した。結構大変でした。
で、調べてみると、Xcodeは、MAC app storeからダウンロードしろと・・・
004
で、OS 10.6.6 以降でないとダメなんですか・・・?

しかし、激安マックは、10.5.8 

なぜ激安なのか・・・だんだんわかってきましたよ。w 

試しに、最新のMac OSをダウンロードしてみると、やはりこういうレスポンスが・・・
005

ならば逆に、Xcodeのほうを、昔の古いバージョンにすれば?と思った。
まず、WindowsマシンでAppleのサイトでこういうのがあるのを発見。
006

Xcode 4.5.2 あたりどうでしょう??こちらのサイト様を参考に。

と思ったけど、Windowsマシンでダウンロードしても意味ないので、マックからダウンロードしようとしてみると・・・・
007
と来たよ。アップルのサイトなのに、Macではセキュリティー上開けないと来たもんだwww(^◇^)

ならば、ブラウザはアップルのは見捨てて、Google Chromeでは?と思った・・・・ら、Chromeのサイトに行ってみたら、Mac OSの新しいバージョンしかサポートしてないと・・・・。
さらに、古いバージョンのChromeを探してみたけど、少し前まであったらしいけど現在は既に無いと。



う~~~ん。。。。

中古マックが激安な理由がよくわかった・・・ということで終わってしまうのか?

安物買いの銭失いの典型か? w 今日のところはここまで・・・

こういう構造体を作ってfscanf_sを使おうとする。
struct phone_type{
   char name[40];
   int areacode;
   char number[9];
} phone[MAX];

正解はこのように、
fscanf_s(fp, "%s%d%s", phone[loc].name, _countof(phone[loc].name), &phone[loc].areacode, phone[loc].number, _countof(phone[loc].number));

%s フォーマットの変数に対する要素数指定には_countof()を使ったりするけれど、
%d フォーマットの変数(&になる)に対する要素数指定は「なし」が正解。

fscanfを使おうとすると、「fscanf_sを使え」と怒られる件。

例えばグローバルでこういうの宣言して、

char names[100][40];
char numbers[100][40];


こういうのを作った時、

void load(void){
FILE *fp;
errno_t errno;

if ((errno = fopen_s(&fp, "phone", "r")) != 0){
printf("ファイルを開けない\n");
printf("%d", errno);
exit(1);
}

loc = 0;
while (!feof(fp)){
printf("%s%s", names[loc], numbers[loc]);
fscanf_s(fp, "%s%s", names[loc], 40, numbers[loc], 40);
loc++;
}
fclose(fp);
}


fscanf_sのパラメータで、各変数の後にその大きさ(赤字で書いたもの)を入れないと、コンパイルは通るが実行時エラーで落ちる。

*** fscanf_s だけでなく、gets_s / strcpy_s(これはコンパイルも通らない)も同様。

if ((from=fopen(argv[1], "r")) == NULL)
みたいな文が書いてあるCの本の例題をVisual Studio 2013に入れてみると、「fopenは使うな、fopen_sを使え」みたいなふうに怒られる。さらに、argc, argv[]が出てくると、どうしたものか迷う。

1. argc, argv[]=コマンドライン引数の入れ方
コマンドライン引数指定
みたいに、プロジェクトのプロパティのデバッグのコマンド引数に入れる。

で、実行してみてもエラーになる。結局、デバッグモードでのコマンドライン引数指定は.exeファイルと同じ場所ではダメだった。ここに入れなくてはいけない。
argv対象ファイルの場所
consoleappication5の下の、consoleappication5のフォルダで、かつDebugフォルダの上。これを発見するには、一旦fopen_sのパラメータを"w”にして実験してみる必要がある。


2. fopen_s騒動
こことかここに書いてあるけど、初心者がいきなりそれを見てもわからない。

要するに、

int main(int argc, char *argv[])
{
FILE *from, *to;
char ch, watch;
errno_t errno;

/*コマンドライン引数の数確認*/
if (argc < 3){
printf("引数だめだよ\n");
exit(1);
}

/*コピー元ファイルを開く*/
if ((errno = fopen_s(&from, argv[1], "r")) != 0){
printf("コピー元ファイルを開けない\n");
printf("%s\n", argv[1]);
printf("%d", errno);

exit(1);
}

/*コピー先ファイルを開く*/
if ((errno = fopen_s(&to, argv[2], "w")) != 0){
printf("コピー先ファイルを開けない\n");
printf("%s\n", argv[2]);
printf("%d", errno);

exit(1);
}

if (argc == 4 && !strcmp(argv[3], "watch"))
watch = 1;
else
watch = 0;

/*ファイルをコピー*/
while ((ch = fgetc(from)) != EOF){
fputc(ch, to);
if (watch) putchar(ch);
}
fclose(from);
fclose(to);


の青字みたいにすれば動く。赤字みたいなのを加えておくと動作確認できる。

このページのトップヘ