C++/CLIにインテリセンスが必須な理由

Visual Studio 2010 の C++/CLI ではインテリセンスが効かないのです。 C++では、効くし、最新情報にある通り結構早くなっています(最初にヘッダファイル等を読み込んでデータベース化するところは相変わらずなんですが)。 さて、これを /clr スイッチを付けて、C++/CLI として使おうとすると、全く駄目。C++ 側のインテリセンスも、.NET側のインテリセンスも両方が効きません。全く、昔の vi で組んでいた状態に戻ります。 このインテリセンスの機能、C++/CLIで使えないのは、.NET Framwork を選択するという点でも結構致命的なのです。 それをいくつか説明しましょう。   ■C++で組むときにインテリセンスがでない MFCで組む時には出てたインテリセンスが、C++/CLIでは出ない訳ですから、かなり不便です。ただし、不便とはいえ、C++ のヘッダファイルを参照すれば、(かなり面倒ですが)クラス名から関数名を割り出すことができます。 ただし、Visual C++ 6.0 の頃から出ていたもの(10年前)以前に逆戻りというのは、かなり開発効率が落ちるでしょう。 なので、C++/CLI のコンパイラを捨てて、C++ だけでコンパイルするでしょうね。 そうなると、MFC でのインテリセンスも使えるのでうまくできます。   ■.NETとしてC++/CLIを使う場合に困る C#やVisual Basicで出ていたインテリセンスが出ないので、結構困ります、、、が、ヘルプを参照すれば何とかコーディングができるでしょう。 しかし、.NET FrameworkでWindowsアプリを組む場合、C++/CLIだけで組むことは皆無でしょう。C#やVisual Basicを選択しますよね。 C++/CLIで作る場合は、学習用か趣味のときぐらいです。 また、C++/CLIで使い勝手が悪かったら、C#やVisual Basicを使えばいいだけです。   ■ハブとしてC++/CLIを使う場合に、致命的 さて、これが一番の問題です。 C++/CLIの使いどころは、実は既存のC/C++ライブラリと.NETアプリケーションを媒介するところなのです。例えば、OpenCV という画像解析用のライブラリがありますが、これはC++で書かれています。このために、ライブラリを利用するためには、C++の呼び出し(あるいは専用に用意されたC言語呼び出し)が必要になります。 ご存じのとおり、C#やVisual Basicではポインタが扱えません。正確に言えば、C#でboxingを使えば、ポインタを使えるのですが非推奨の機能です。また、適切な呼び出しの属性を付ければ、C#からC言語で作られたDLLを呼び出すことができますが、結構手間です。 さて、この場合は、C言語のライブラリに適当なC++/CLIのラッパを作ります。 つまり、 C言語 → C++/CLI → C# [...]

Visual C++ 2010 の C++/CLI ではインテリセンスが効かない?

誤報であれば、後で修正しますが、ちと致命的なので。 Visual C++ 2010 の C++/CLI プログラミングではインテリセンスが効きません。 Microsoft のページでは、 Visual C++ 2010 の新機能 http://msdn.microsoft.com/ja-jp/library/dd465215.aspx の中で、 強化された IntelliSense エラー Visual Studio 2010 の統合開発環境 (IDE) では、IntelliSense の障害を引き起こす可能性があるエラーの検出機能が強化されました。また、IntelliSense エラーが [エラー一覧] ウィンドウに表示されます。問題の原因となっているコードを表示するには、[エラー一覧] ウィンドウでエラーをダブルクリックします。 となっており、強化されているハズなのですが、効かない。 で、試しに MFC のほうでプロジェクトを作ってみるとインテリセンスは効きます! なので、どうやら「C++/CLI」だけインテリセンスが効かない、現象なのかと。 まずいなぁ~、これは、一挙にモチベーションが↓↓↓(3段階ぐらいダウン)。   MFCでプロジェクトを作るとき、インテリセンス用のデータベースがクラッシュして、仕方がないので作り直し(単にファイルを消すだけだけど)することが多かったのですが、C++/CLIのインテリセンスは効いていました。C#やVisual Basicでは、普通に使うので慣れてしまって、C++で作るときも必須ってな機能なんですけど、C++/CLIだけ、できないってのは、ちょっと困る。 # 英語のRC版でもできなかったので、直るものかと思ったら。こういう落ちとは。 公式的にはどうなのか、後で尋ねますか。。。 C++/CLIでもIntelliSenseが機能してほしい https://connect.microsoft.com/VisualStudioJapan/feedback/details/519716/c-cli-intellisense?wa=wsignin1.0#tabs えぴさんに対する回答にコメントしておきました。 ~~ 2010/05/03 追記 Visual C++ Team Blog でも炎上していますね。 http://blogs.msdn.com/vcblog/archive/2010/04/13/visual-studio-2010-is-now-available.aspx#9995285 フォーラムのほうも http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/0dfc0cc6-271f-45a3-9838-1478e96df75b/ http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/22ed2e0f-105c-4018-8591-fe999a14a80d [...]

OpenPNE 2.14 で招待メールが送信できない場合

招待メールが送信できたのでメモ。 OpenPNE 2.14 では、メールの送信は、/OpenPNE-2.14.5/webapp/lib/util/mail_send.php の 62行目あたりで mail 関数を使って送っています。 PHPでは、メールの送信がいくつかあります。 http://www.komonet.ne.jp/~php/chap15.htm で、招待メールが送れないパターンとして、 相手が拒否している。 sendmail(かな?)、が from のドメインをチェックして送れない。 今回のように、mail関数のほうの設定がうまくいっていない。 場合があります。 1の相手が拒否している(と思われる場合は)、拒否解除をすると同時に、 config.php にある、 MAIL_ENVFROM で相手の受け取れるドメインにする。 します。 2のsendmail,qmailが、ドメインのチェックをしている場合は、 MAIL_SET_ENVFROM を false にして、-f スイッチで設定しない。 あるいは、MAIL_ENVFROM のドメインを合わせる。 形になり、 3のように、そもそもmail関数だと駄目な場合は、 MAIL_SET_ENVFROM を false にした上で、 mb_send_mail関数に切り替える ようにします。 # MAIL_ENVFROM、ADMIN_EMAIL の設定を使いたい場合は、両方の mail 関数を切り替えればいいんだけど、mb_send_mail関数の追加パラメータが mail関数互換のなのか不明なので。 修正箇所はは↓です mb_send_mail 関数を使う場合は、Subject が自動でエンコードされるので、     // subject (改行コードを含んではならない)     $subject [...]

OpenPNE 2.14 のインストールはok

ってな訳で、OpenPNE 2 にしてインストールはok。ログインまでできた。 んがしかし、招待メールが送れない…何故? 解決法としては、config.php の // Envelope-From ヘッダを設定するかどうか(safe_mode の場合は false に設定してください) define(‘MAIL_SET_ENVFROM’, false); ★ にするらしいんだが、bluehost.com ではうまくいかない。 試しに、自前のお見積りフォーム(ってのを作成中)では送信ができた。 mb_send_mail 関数を使っているので、ここが違うと思われる。まあ、このあたりは後日調査する。   ユーザを追加するのは、管理画面でCSV形式でインポートができるので、当面はそれを利用すればOK(実験だし)。

OpenPNE 3 インストールできず

で、Bluehost の設定もできたので、http://www.openpne.jp/pne-downloads/openpne3/ にあるセットアップ手順通り ./symfony install:openpne を入力して、動かしたものの… Fatal error: Class ‘PDO’ not found in /home/hostname/public_html/pne3/lib/plugin/opPluginManager.class.php on line 164 なるところで頓挫。PDO がない現象にぶちあたると、phpの構築に走ることになるので、Bluehost の権限ではできず。 bluehost の PHP は、 PHP 5.2.11 (cgi-fcgi) (built: Dec 14 2009 22:49:29) らしいのだが、何故駄目なのかは分からず。 ネットで調べてみたが、同じところで困っている人もいて、解決は yum ぐらいしかないみたい。   なわけで、OpenPNE 2 で試しますか。