Visual Studio .Net のC++でメンバ変数を追加するとデフォルトコンストラクタにはそのメンバ変数のイニシャライザが追記されるのに
そのほかのコンストラクタには、追加されない。なんでだろう。
デフォルトコンストラクタじゃないと、何になるかわからないからかな。でも、デフォルトコンストラクタでも
実際のところ何になるかはわからないはず。うーむ。
Webと連携するプログラムを書いていたのですが、ヘッダーに Content-type: application/x-www-form-urlencoded¥r¥nと書かないと処理してくれないサーバーがある。 これってどういう意味だろう。基本的なところっぽいけれど、あとでちゃんと調べておこう。 ちなみに、コードで書くとこんな感じ。
CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject,NULL,1,NULL,NULL,dwRequestFalg); CString strHeaders = "Content-type: application/x-www-form-urlencoded¥r¥n"; pFile->AddRequestHeaders((LPCSTR)strHeaders);
PocketPCのSIPの作成をやってみる。 このページを参考に作ってみた。サンプルを走らせるとうまくいくような感じだが、 ほかのSIPに切り替わらない。調べてみたら、Discussionに記載があった。deselectを次のように書かないといけないらしい。
STDMETHOD(Deselect)() { AFX_MANAGE_STATE(AfxGetStaticModuleState()) if (m_pSipPanel) { m_pSipPanel->DestroyWindow(); delete m_pSipPanel; m_pSipPanel = 0; //or NULL } return S_OK; }
MSDNのAn In-Depth Look into the Win32 Portable Executable File Formatを読んだ。PEフォーマットについてわかりやすく書いてあった。 PEフォーマットというのは、いままで言葉は知っていたが、内容はよく知らなかったので、非常にためになった。
Visual Studio .NETでは、ひとつのソリューションに複数のプロジェクトがあり、異なるプロジェクトで同じファイル名を持ったファイルがあると クラスビューがきちんと動作しないことがある。指定したプロジェクトじゃないほうのクラスが選択されることがある。解決方法はあるのかな。 競合するファイル名を持つプロジェクトははずすしかないのかなぁ。
今日、確認したこと。
リソースは、.rsrcセクションに入っている。
LoadLibraryは、EXEに対しても使える。(リソースなんかが取得できる)
リソースをいじるには、リソースハッカーが便利だ。
Httpサーバーと通信するプログラムを作っていたのだが、どーもうまくいかない。 いろいろ、調べてみたらPOSTするオプションデータの最後に¥0が入っているせいだった。 Cの世界で文字列を扱うと通常、最後に¥0がくるけれど、その分は送信したら、ちゃんと処理してくれないこともあるんだなぁ。
Visual Studio .Net 2003 で ATLオブジェクトを作ってみたら、こんな風になった。
// IeObj.cpp : DLL エクスポートの実装です。 #include "stdafx.h" #include "resource.h" // このモジュール属性は、DllMain、DllRegisterServer および DllUnregisterServer を自動的に実装します。 [ module(dll, uuid = "{7DF8C138-0262-41EB-B169-D510CD1E56DE}", name = "IeObj", helpstring = "IeObj 1.0 タイプ ライブラリ", resource_name = "IDR_IEOBJ") ] class CIeObjModule { public: // CAtlDllModuleT メンバのオーバーライド };クラスビューでみると、CIeObjModuleは、CAtlDllModuleTを継承しているのだが、何も継承してない何もないクラスだよなぁ。 ぜんぜん、わからなかったが、moduleがトリックだった。 これで継承を定義しているみたい。