[C++Builder] SIMD
#include <nmmintrin.h> // MMX-SSE4.2
#include <smmintrin.h> // MMX-SSE4.1
#include <intrin.h> // MMX-SSE3
#include <emmintrin.h> // MMX-SSE2
#include <xmmintrin.h> // MMX-SSE
#include <mmintrin.h> // MMX
| 固定リンク
#include <nmmintrin.h> // MMX-SSE4.2
#include <smmintrin.h> // MMX-SSE4.1
#include <intrin.h> // MMX-SSE3
#include <emmintrin.h> // MMX-SSE2
#include <xmmintrin.h> // MMX-SSE
#include <mmintrin.h> // MMX
| 固定リンク
#pragma pack(push,1)
struct TAPP1Header {
WORD Maker;
WORD Size;
byte Magic[6];
};
#pragma pack(pop)
| 固定リンク
StrToIntは文字列を数字に変換するための関数ですが、引数に数字として不正な文字列(例えば「125a」とか)を渡すと例外が発生してしまいます。これをきちんと処理するのが面倒だったり、単純に不正な文字列が渡された場合は-1を返してほしいと思う場合があったりします。そういう時に便利なのがStrToIntDefという関数です。
i:=StrToIntDef(Edit1.Text,-1);
というようにデフォルト値を指定して変換ができます。変換に失敗した場合はデフォルト値が返される仕組みです。例外は発生しません。場合によっては非常に便利な関数です。
| 固定リンク
AnsiStringのsprintfメソッドを使います。
書式はDelphiのFormat関数と同じような感じです。
AnsiString Str=AnsiString().sprintf("%.5d",i);
| 固定リンク
リソースをテキストエディタなど作成して「tmp.rc」というような名前で保存します。そのファイルをプロジェクトに追加してコンパイルします。rcファイルをBRCC32でコンパイルしてresファイルに変換しなくてもOKです。
リソースファイル(*.rc)の中身は
リソース名 リソースタイプ "ファイル名"
のように書きます。例えば、
MYICON ICON "MyIcon.ico"
MYBMP BITMAP "MyBmp.bmp"
のようです。
switch文のcaseでローカル変数を以下のように使おうとすると、「caseでローカル変数の初期化がとばされた」というようなエラーメッセージが表示されてしまいます。
switch (Value) {
case 0:
int i=0;
:
break;
default:
:
break;
}
このようなことをしたいときは時は次のようにcaseの中をブレースで括ります。
switch (Value) {
case 0:
{
int i=0;
:
break;
}
default:
:
break;
}
ウインドウの一覧を得るEnumWindowsというAPIがありますが、C++Builder6.0でこの関数を使用すると以下のようなエラーがでる場合があるようです。
----
E2034 'int (__stdcall *)(void *,long)'型は'int (__stdcall *)()'型に変換できない
E2342 パラメータ 'EnumWndProc' は int (__stdcall *)() 型として定義されているので int (__stdcall *)(void *,long) は渡せない
----
以下のように強制的にキャストをかけてしまえばコンパイルできるようになります。きちんと意図した動作もしているようです。
//関数の定義
BOOL CALLBACK EnumWndProc(HWND hWindow,LPARAM lData)
{
:
}
//呼び出し
EnumWindows((WNDENUMPROC)EnumWndProc,0);
Form上のコンポーネントのうち、ある特定のクラスから派生しているものだけに対して処理をしたい場合に使えるテクニックです。以下は、TControlから派生したクラスに対してのみ処理をする場合の例です。
for (int i=0;i<ComponentCount;i++) {
if (Components[i]->InheritsFrom(__classid(TControl))) {
TControl *Ctrl=(TControl *)Components[i];
//何か処理をする
}
}
Frac関数、およびInt関数を使用します。
uses System,Math;
var
J:Extended;
I:Integer;
S:Extended;
begin
J:=1.23;
I:=Int(J); //整数部分 1
S:=Frac(J); //小数部分 0.23
end;
Delphiにはwith文を使って、長いコードを省略することができます。例えば以下のようです。
with Form1.Image1.Picture.Bitmap.Canvas do begin
MoveTo(0,0);
LineTo(1,1);
end;
BCBでも使いたいところですが残念ながらBCBにはwith文はありません。その代わりに次のようにして書くことができます。
TCanvas *Canvas=Form1->Image1->Picture->Bitmap->Canvas;
Canvas->MoveTo(0,0);
Canvas->LineTo(1,1);
var
Arry: array of Char; //1次元配列
Arry2: array of array of Char; //2次元配列
begin
//1次元配列の場合
SetLength(Arry, 256);
//2次元配列の場合
SetLength(Arry2, 30);
SetLength(Arry2[0], 100);
SetLength(Arry2[1], 100);
end;
BCBで使用できる32ビットのデータ型とサイズ
| 型 | バイト | 範囲 |
| unsigned char | 1 | 0 ≦ X ≦ 255 |
| char | 1 | -128 ≦ X ≦ 127 |
| short int | 2 | -32,768 ≦ X ≦ 32,767 |
| unsigned int | 4 | 0 ≦ X ≦ 4,294,967,295 |
| int | 4 | -2,147,483,648 ≦ X ≦ 2,147,483,647 |
| enum | 4 | -2,147,483,648 ≦ X ≦ 2,147,483,647 |
| unsigned long | 4 | 0 ≦ X ≦ 4,294,967,295 |
| long | 4 | -2,147,483,648 ≦ X ≦ 2,147,483,647 |
| float | 4 | 1.18 * 10^-38 < |X| < 3.40 * 10^38 |
| double | 8 | 2.23 * 10^-308 < |X| < 1.79 * 10^308 |
| long double | 10 | 3.37 * 10^-4932 < |X| < 1.18 * 10^4932 |
関数型を __closure という指定をつけてtypedefします。
typedef void __fastcall (__closure *TMyEvent)(int State);
class TMyClass
{
private:
TMyEvent *FOnMyEvent;
:
public:
__property TMyEvent *OnMyEvent={read=FOnMyEvent, write=FOnMyEvent};
:
};
AnsiStringをchar *に代入したいときは、c_str() を使用します。
char *dest;
AnsiString src="test";
//dest=src; これはエラーになる
dest=src.c_str();
c_str() を使う際の注意点。
AnsiString::c_str() は一時的な領域をを指すポインタを返します。このポインタは,それが使われている文の実行が終了すると不定になってします。 そのため、 c_str() が指す領域を変更するような処理をしてはいけません。
char *buf=NULL;
buf=new char[1024];
/* bufを使った処理 */
delete [] buf;
確保した配列を解放するときに[ ]を付け忘れると、配列の最初の要素だけが解放されることになります。書き忘れないように注意しましょう。
| 定数名 | 説明 |
| CHAR_MIN | char型の最小値 |
| CHAR_MAX | char型の最大値 |
| UCHAR_MAX | unsigned char型の最大値 |
| SHRT_MIN | short型の最小値 |
| SHRT_MAX | short型の最大値 |
| USHRT_MAX | unsigned short型の最大値 |
| LONG_MIN | long型の最小値 |
| LONG_MAX | long型の最大値 |
| ULONG_MAX | unsigned long型の最大値 |
| INT_MIN | int型の最小値 |
| INT_MAX | int型の最大値 |
| UINT_MAX | unsigned int型の最大値 |
C++Builder | C++言語・Pascal言語 | Delphi | TActionList | TColor | TEdit | TeX | TForm | TIniFile | TLabel | TListBox | TListView | TMemo | TProgressBar | TSplitter | TStatusBar | TStringGrid | TTrackBar | TWebBrowser | Windows | その他 | アルゴリズム | システム関連 | ネットワーク関連 | ファイル、フォルダの処理 | フォント関連 | フォーム・ダイアログ関連 | フリーソフト | プログラミング全般 | マウス、キーボードの処理 | 文字列の処理 | 日付時刻の処理 | 画像関連 | 開発環境(IDE)関連