C 言語で書かれたコードを AB のコードにしていくのがどうにもうまくいきません。
どなたか、C 言語と AB が出来る方で教えていただけないでしょうか?
C 言語のコード
[ここをクリックすると内容が表示されます]
自力で直したコード
コード: 全て選択
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//『getcpust.dll』のサンプルプログラム 2005/09/24 作成
#include <tchar.h>
#include <stdio.h>
#include <windows.h>
//-------------------------------------------------------------------------------------------------------
//
//メモ書き
//『getcpust.dll』を使ったサンプルプログラムです。
//このプログラムでは流れが見やすいようにCPU占有率の値を代入するタイミングをタイマー時間にしているので起動直後は
//0が表示されますが、描画部で取得して表示するなどの方法で起動直後から値が表示できるようにすることができます。
//CPU占有率は第1引数にint型のポインタを引き渡すことで得ることができます。
//得られる値はCPU占有率を四捨五入して整数としたものです。
//Win32 APIを使ったコードですが、MFCや.Net系でも扱い方は似たり寄ったりだと思います。
//戻り値はFALSE(0)が取得エラーで、それ以外が成功です。
//-------------------------------------------------------------------------------------------------------
//
//宣言
typedef int (*CPU_FUNC)( int * );
ATOM MyRegisterClass(HINSTANCE hInstance);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int ShowText( HDC , int );
//-------------------------------------------------------------------------------------------------------
//
//プログラム本体
//メイン関数
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
{
MSG msg;
HWND hWnd;
MyRegisterClass(hInstance);
hWnd = CreateWindow( "WindowClass", "リソース", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, 30, 100, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0))
{
DispatchMessage(&msg);
}
return 0;
}
//クラス登録
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = NULL;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "WindowClass";
wcex.hIconSm = NULL;
return RegisterClassEx(&wcex);
}
//ウィンドウプロシージャ (ウィンドウの処理)
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HINSTANCE hDll=NULL; //dllのインスタンスハンドル
static CPU_FUNC pCpuFunc=NULL; //dllの関数へのポインタ
static int iStatus = 0; //CPU占有率の値
switch (message)
{
case WM_CREATE:
{
hDll = LoadLibrary( "getcpust.dll" ); //Dllのロード(必要に応じてパスを変える)
if(!hDll)
{
return -1; //dllの取得に失敗
}
pCpuFunc=(CPU_FUNC)GetProcAddress(hDll,"GetCpuStatus"); //Dllから関数を取得
if(!pCpuFunc) //関数が取得できたか確認
{
return -1; //dllが壊れている
}
SetTimer( hWnd , 1 , 1000 , NULL ); //タイマーを起動
}
break;
case WM_TIMER:
{
pCpuFunc( &iStatus ); //Dllの関数を使ってCPU占有率を取得してiStatusに値を代入
InvalidateRect( hWnd , NULL , TRUE ); //表示の更新
}
break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc;
hdc = BeginPaint(hWnd, &ps);
ShowText( hdc , iStatus ); //表示
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
{
KillTimer( hWnd , 1 ); //タイマーの解除
FreeLibrary( hDll ); //Dllの解放
PostQuitMessage(0);
}
break;
default:
{
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
}
return 0;
}
//ここから先はdllの処理とは直接関係ない関数(エラー処理とかいい加減になっているので注意してください)
//ウィンドウに表示する関数
int ShowText( HDC hdc , int iStatus )
{
char str[256];
sprintf( str ,"CPU:%d%",iStatus );
TextOut( hdc , 0 , 0 , str , (int)strlen( str ) );
return TRUE;
}
[ここをクリックすると内容が表示されます]
若しくは
コード: 全て選択
declare function cpus lib "getcpust" alias "GetCpuStatus" (iStatus as long,pCpuFunc as long) as long
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim st As Long, cf As Long
cpus(st,cf)
Dim str[256] As char
wsprintf(str,"%d %",st)
SetTimer(hMainWnd,0,1000,0)
End Sub
Sub cpu_Timer(TimerID As DWord)
dim st as long, cf as long
cpus(st,cf)
dim str[256] as char
wsprintf(str,"%d %",st)
SetWindowText(GetDlgItem(hcpu,Static_rate),str)
End Sub
[ここをクリックすると内容が表示されます]
僕ではこの程度までしか出来ません。コード: 全て選択
declare function cpus lib "getcpust" alias "GetCpuStatus" (iStatus as long,pCpuFunc as long) as long
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim st As Long, cf As Long
cpus(st,cf)
dim str[256] as char
wsprintf(str,"%d %",st)
SetWindowText(GetDlgItem(hMainWnd,Static_rate),str)
SetTimer(hMainWnd,0,1000,0)
End Sub
Sub MainWnd_Timer(TimerID As DWord)
dim st as long, cf as long
cpus(st,cf)
dim strs[256] as char
wsprintf(strs,"%d %",cf)
SetWindowText(GetDlgItem(hcpu,Static_cpu),str)
End Sub
どなたかお願いします。