VisualStudio2013 C++

一時的な文字バッファにstd::stringクラスは使わない、ただそれだけで速くなった。 #pragma oncenamespace V4 {class SplitString { public : SplitString(){} ~SplitString(){ clear(); } USHORT Split( LPCWSTR str, WCHAR ch ) { USHORT s = 0, e=0; std:…

C++には文字の分割で気の利いた方法がない。vectorで結果を受け取る方法は、その過程でメモリの やり取りに無駄が多い。 そこで、SplitStringというクラスを作成して、試してみるとなんと3倍も速くなった。 #include "stdafx.h" #include #include #include…

結局、NodeJS+V8に押された形で、JavaScript(Chakrart)のネイティブアプリ採用を公に認めた。 今までは煮え切らない態度で、IActiveScriptを作ったもののそれ以上何もしてこなかった。 セキュリティの問題が発生しやすいので、本当はあまりプッシュしたくな…

BSTRは::SysFreeString(x); を実行しても直ぐには消えない。 デバッグの時ににこれが厄介になる場合がある。 下の関数を一度実行するとキャッシュを切ることができる。 #ifdef _DEBUG typedef int (*SETOANOCACHE)(void); // 昔は非公開関数だった?// BSTR…

最新のxml paserはmsxml6。でもリリースからだいぶ時間もたち忘れられそうでメモしておく。使い方に癖があって、 #includeではなく、#importでライブラリ情報を動的に取得しなければならない。 しかも、COMは自動的にスマートポインタになる。 #include "std…

HWNDを必要としない入力コントールをDirect2Dで作成しました。C++で作成されるアプリはやがてこの方式へ移行すると思われます。 従来、Windowsコントロール(button,textbox,listbox,...)は以下のようにParent Windowのchild windowとして作成しなければ、な…

前のBinaryクラスで簡単なサンプルを作成。PNGファイルを暗号->複合。 非常にあっさりとしたプログラムになる。int _tmain(int argc, _TCHAR* argv[]) { _tsetlocale ( LC_ALL, L"" ); _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_DELAY_FREE_MEM_DF|_C…

前のBinaryクラスを使用して文字列(unicode)とバイナリデータ(ansi文字列を含む)のややこしいやり取りを極限まで簡素化してみた。 // utf8とunicodeの変換 Binary utf8( std::wstring& s ); std::wstring utf8( const Binary& b );// バイナリーデータのbase…

バイナリデータを扱う上で必ず必要になる情報はバイナリデータの長さである。 これらをまとめて、かつ参照カウンタで寿命を管理する簡単便利なクラスを作ってみた。 参照カウンタの加減算にロックはかけていないので、スレッドには未対応である。 //////////…

HWNDはウインドウハンドルだが、OOPではちょっと邪魔な存在である。 子ウインドウは親ウインドウのWM_PAINTとは別系統でシステムが描画するからである。 コントロールの描画をWM_PAINTだけで統一できれば、色々なことができるはずだが、20年以上前のメモリ4M…

Direct2DでイメージファイルであるPNGを表示する方法。 ID2D1RenderTarget* cxt = ...CComPtr bmp; D2DResource::LoadImage( cxt, L"e:\test\images\abc.png", &bmp ); // auto image_size = bmp->GetPixelSize(); イメージの大きさ//リソースから読み込む場…

下のMainFrameをDirect2Dで今風(Windows8 Desktop)に作成してみました。Caption右上のボタンは手作りです。 // Win32Project2.cpp : アプリケーションのエントリ ポイントを定義します。 //#include "stdafx.h" #include "Win32Project2.h" // VSが作成した…

JavaScriptのArray(VARIANT型)をCOM側で作成する方法、map編 static bool CreateJavaScriptMap( IActiveScript* pAS, std::map& src, IDispatch** pout ) { HRESULT hr; CComPtr pD; CComVariant vr; DISPID idMethod; LPOLESTR nm[] = { L"Array" }; hr = p…

JavaScriptのArray(VARIANT型)をCOM側で作成する方法、list編 bool CreateJavaScriptArray( IActiveScript* pAS, VARIANTARG* varg, int varg_cnt, IDispatch** pout ) { HRESULT hr; CComPtr pD; CComVariant vr; DISPID idMethod; LPOLESTR nm[] = { L"Arr…

JavaScript内のArray(VARIANT型)をCOMへ投げ入れてみたが、keyは文字型になる。JavaScript : var ar = [1,2,3]; var map = { "first":1,"second":2,"third":3 };// obj is CListCom Variant obj.Set( ar ); obj.Set( map );C++ : STDMETHODIMP CListCom::Set…

高分解能 経過時間の計測方法 #include "stdafx.h" #include #include int _tmain(int argc, _TCHAR* argv[]) { LARGE_INTEGER s,f,e; QueryPerformanceFrequency(&f); QueryPerformanceCounter(&s); { Sleep(1000); // 1sec } QueryPerformanceCounter(&e);…

C++ Amp のindexクラスについて、の簡単明瞭サンプル。 #include using namespace concurrency;void test1() { std::vector data(10); for (int count = 0; count { data[count] = count; // 0,1,2,3,4 } concurrency::array a(2,5, data.begin(), data.end(…

VC++の環境ディレクトリの設定方法などをまとめてみた。●プロジェクトのプロパティ 構成プロパティ ->VC++ディレクトリ 注1 ->C/C++ 全般 追加のインクルドディレクトリ 注2 ->リンカー 全般 追加のライブラリディレクトリ 注3 ->ビルドイベント ビルド後…

githubへあるプログラムを公開しました。 Windows上でC++アプリからjavascriptを利用するサンプルです。