ホーム » Xcode (ページ 2)
「Xcode」カテゴリーアーカイブ
Objective-C から C++ の呼び出し
先日作成した MemStat.hxx を「iOS」−「Single View Application」から利用してみた.
ViewController.m の拡張子を mm に変更.
ボタンと UITextView を貼付けて,変数を定義,ボタンの Action を追加.
以下はそれに対して,C++ の呼出しを加えたコード.
// ViewController.mm
#import “ViewController.h”
#include “MemStat.hxx” // これでいいの?
@interface ViewController ()
@end
@implementation ViewController
@synthesize TextView;
– (void)viewDidLoad
{
[super viewDidLoad];
{
MemoryStatus ms ;
NSString* str = [[NSString alloc]initWithFormat:@”%8.2f MB / %8.2f MB \n”,
ms.GetPhysFree()/1024/1024.,ms.GetPhysTotal()/1024/1024. ] ;
TextView.text = str ;
}
}
– (void)viewDidUnload
{
[self setTextView:nil];
[super viewDidUnload];
}
– (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
– (IBAction)Refresh:(id)sender {
{
MemoryStatus ms ;
NSString* str = [[NSString alloc]initWithFormat:@”%8.2f MB / %8.2f MB \n”,
ms.GetPhysFree()/1024/1024.,ms.GetPhysTotal()/1024/1024. ] ;
TextView.text = [TextView.text stringByAppendingString:str ] ;
}
}
@end
MemStat.hxx
Xcode や VC , W Mobile で可能な様にコードを書いてみた.
#ifndef MemStat_hxx
#define MemStat_hxx
//
#ifdef _WIN32
typedef __int64 i64 ;
typedef unsigned __int64 ui64 ;
#else
typedef long long i64 ;
typedef unsigned long long ui64 ;
#endif
//
#ifdef __APPLE_CC__
#include <mach/mach.h>
#endif
#ifdef _WIN32
#include <Windows.h>
#include <WinBase.h>
#endif
//
class MemoryStatus {
public:
…
} ;
//
…
{
P_Free = P_Total = 0 ;
#ifdef __APPLE_CC__
{
unsigned int count = 0 ;
mach_port_t host_port = ::mach_host_self() ;
host_basic_info_data_t hb_info;
{
count = HOST_BASIC_INFO_COUNT ;
::host_info(host_port,HOST_BASIC_INFO,(host_info_t)&hb_info,&count) ;
}
vm_statistics_data_t vm_info;
{
count = HOST_VM_INFO_COUNT;
::host_statistics(host_port,HOST_VM_INFO,(host_info_t)&vm_info,&count) ;
}
P_Free = vm_info.free_count * vm_page_size ;
P_Total = hb_info.max_mem ;
}
#endif
#ifdef _WIN32
#if !defined(_WIN32_WCE) && (_MFC_VER >= 0x700)
{
MEMORYSTATUSEX memStat ;
memset(&memStat,0,sizeof(MEMORYSTATUSEX)) ;
memStat.dwLength= sizeof(MEMORYSTATUSEX) ;
::GlobalMemoryStatusEx(&memStat) ;
P_Free = memStat.ullAvailPhys ;
P_Total = memStat.ullTotalPhys ;
}
#else
{
MEMORYSTATUS memStat ;
memset(&memStat,0,sizeof(MEMORYSTATUS)) ;
memStat.dwLength= sizeof(MEMORYSTATUS) ;
::GlobalMemoryStatus(&memStat) ;
P_Free = memStat.dwAvailPhys ;
P_Total = memStat.dwTotalPhys ;
}
#endif
#endif
}
//
#endif
ファイルは,UTF-8 と言うか,シフトJIS の設定で,7 bit の範囲の文字のみ使用.
改行は,CR+LF としている.
Xcode 4.3.2
日本語に翻訳されたiOSのドキュメント
初めての iOS アプリケーション
ここを参考にサンプルを書いていて,
「View」ー「Utilities」ー「Show Object Library」 | VC 6 などのコントロールにあたる |
「View」ー「Utilities」ー「Show Attribute Inspector」 | コントロールのプロパティ |
Xcode の設定で,
「Xcode」ー「Preferences…」ー「Text Editing」ー「Indentation」ー「Prefer Indent using」を「Tabs」に.
Class Wizard にあたる部分の使い方がまだよくわからない.