"CPU 情報取得 DLL" でCPU のクロックを取得

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: "CPU 情報取得 DLL" でCPU のクロックを取得

Re: "CPU 情報取得 DLL" でCPU のクロックを取得

by M.S. » 2006年12月30日(土) 19:36

> > "Dim hLib As HMODULE" の "HMODULE" が、
> > "無効な識別子です" というエラーが出ます。
> > AB Ver.4.24.00
> Ver.4.24にHINSTANCEが定義されてるか分からないんですけど、HMODULEは以下のようになっています。
> ActiveBasic Ver.5 CP3
>

コード: 全て選択

TypeDef HMODULE = HINSTANCE
HINSTANCE でコンパイルすると、
正常にコンパイルできました。
ありがとうございました。
しかし、タイマーイベントでやって、
表示された数に "-" の値が混じっている時があります。
これはどうしてなのでしょうか?

Re: "CPU 情報取得 DLL" でCPU のクロックを取得

by 7 » 2006年12月30日(土) 19:17

> "Dim hLib As HMODULE" の "HMODULE" が、
> "無効な識別子です" というエラーが出ます。
> AB Ver.4.24.00
Ver.4.24にHINSTANCEが定義されてるか分からないんですけど、HMODULEは以下のようになっています。
ActiveBasic Ver.5 CP3

コード: 全て選択

TypeDef HMODULE = HINSTANCE

Re: "CPU 情報取得 DLL" でCPU のクロックを取得

by M.S. » 2006年12月30日(土) 14:43

> 「CPU情報取得DLL」をダウンロードしてみました。ソース元を提示してくれてたらもっと簡単に解決したんですけどね...。

すいません、URL 貼付けようと思ったまま、
ずっと忘れてました…

> "developper.txt"を読むと一発で分かります。
>
DLLを動的にリンクしてください。
>
> そういう訳で以下のようになります。
>
>

コード: 全て選択

' モジュールレベルで
> TypeDef GETFREQ = *Function(ByVal dw As DWord) As Double
> 
> ' プロシージャレベルで
> Dim hLib As HMODULE
> Dim GetFreq As GETFREQ
> 
>  hLib=LoadLibrary("cpuinfo.dll")
> 
>  If hLib=0 Then Exit Sub
> 
>  GetFreq=GetProcAddress(hLib,"GetFrequency") As GETFREQ
> 
> Dim a[255] As char
> 
>  wsprintf(a,"%d",GetFreq(5))
>  SetDlgItemText(hMainWnd,EditBox1,a)
> 
>  FreeLibrary(hLib)
> あと、"developper.txt"っていうの読んでますか?
>
double WINAPI GetFrequency(DWORD m_count);
> :実測値の周波数を返す。
> m_count 計測回数(少ないほど早いが、多いほど正確)
> 周波数を返すんですよ?

"developer.txt" を読んだのですが、
"DLLを動的にリンクしてください。" の意味が全然わからなかったので、
適当に Declare Function を使ってました…orz

> 追記。
> 忘れてました。忙しくて実行もせず想像で書いてるのでまだなんか問題あるかもしれません。

おっしゃる通り問題がありました。
"Dim hLib As HMODULE" の "HMODULE" が、
"無効な識別子です" というエラーが出ます。

AB Ver.4.24.00

Re: "CPU 情報取得 DLL" でCPU のクロックを取得

by 7 » 2006年12月29日(金) 19:27

CPU情報取得DLL」をダウンロードしてみました。ソース元を提示してくれてたらもっと簡単に解決したんですけどね...。

"developper.txt"を読むと一発で分かります。
DLLを動的にリンクしてください。
そういう訳で以下のようになります。

コード: 全て選択

' モジュールレベルで
TypeDef GETFREQ = *Function(ByVal dw As DWord) As Double

' プロシージャレベルで
Dim hLib As HMODULE
Dim GetFreq As GETFREQ

	hLib=LoadLibrary("cpuinfo.dll")

	If hLib=0 Then Exit Sub

	GetFreq=GetProcAddress(hLib,"GetFrequency") As GETFREQ

Dim a[255] As char

	wsprintf(a,"%d",GetFreq(5))
	SetDlgItemText(hMainWnd,EditBox1,a)

	FreeLibrary(hLib)
あと、"developper.txt"っていうの読んでますか?
double WINAPI GetFrequency(DWORD m_count);
:実測値の周波数を返す。
m_count 計測回数(少ないほど早いが、多いほど正確)
周波数を返すんですよ?

追記。
忘れてました。忙しくて実行もせず想像で書いてるのでまだなんか問題あるかもしれません。

Re: "CPU 情報取得 DLL" でCPU のクロックを取得

by M.S. » 2006年12月29日(金) 18:46

> まず、おそらく戻り値が違いますね。
>

コード: 全て選択

' C/C++言語
> ' double WINAPI GetFrequency(DWORD m_count);
> Declare Function GetFrequency Lib "DLLのファイル名" (ByVal m_count As DWord) As Double
> 
> ' cdecl規約で宣言してみる
> ' Declare Function GetFrequency cdecl Lib "DLLのファイル名" (ByVal m_count As DWord) As Double
> あとはそのDLLがWindows 95に対応してないとか。

返信遅れてしまってすいません。

両方試してみたのですが、
表示させてみると "0" が表示されました。
どこがいけないのでしょうか?

Re: "CPU 情報取得 DLL" でCPU のクロックを取得

by 7 » 2006年12月24日(日) 17:08

> どこかおかしいところがあるのでしょうか?
まず、おそらく戻り値が違いますね。

コード: 全て選択

' C/C++言語
' double WINAPI GetFrequency(DWORD m_count);
Declare Function GetFrequency Lib "DLLのファイル名" (ByVal m_count As DWord) As Double

' cdecl規約で宣言してみる
' Declare Function GetFrequency cdecl Lib "DLLのファイル名" (ByVal m_count As DWord) As Double
あとはそのDLLがWindows 95に対応してないとか。

"CPU 情報取得 DLL" でCPU のクロックを取得

by M.S. » 2006年12月24日(日) 16:44

今回は、"CPU 情報取得 DLL" で、
CPU のクロックを表示させようとしているのですが、
C/C++ で書かれたサンプルを見て、
「これで合ってるのかな?」というコードを書きました。
しかし、Windows 95 でコンパイル&実行をしてみると、
「Microsoft Visual C++ Runtime Library」のランタイムエラーが出てしまいます。
どこかおかしいところがあるのでしょうか?

ページトップ