DLLの作成 ( レジストリの読み出し )

  テンプレートプロジェクト作成



1) ファイル --> 新規作成
2) Win32 Dynamic-link Library を選択
3) プロジェクト名を決定 ( Regget )
4) ディレクトリ位置の決定
5) OK

6) 「シンボルをエクスポートするDLL」 を選択
7) 終了



  Regget.cpp に処理を実装



  
LONG GetLocalMachineKeyValue( LPTSTR KeyString, LPTSTR Entry, LPTSTR Value )
{
	LONG	nRet;
	HKEY	Handle = 0;
	
	nRet = RegOpenKeyEx(
				HKEY_LOCAL_MACHINE,
				KeyString,
				0,
				KEY_ALL_ACCESS,
				&Handle
			);
	if ( nRet != ERROR_SUCCESS ) {
		return nRet;
	}

	DWORD	Type = 1;
	DWORD	Data = 1024;

	nRet = RegQueryValueEx(
					Handle,
					Entry,
					NULL,
					&Type,
					(LPBYTE)Value,
					&Data
			);
	if ( nRet != ERROR_SUCCESS ) {
		RegCloseKey( Handle );
		return nRet;
	}

	RegCloseKey( Handle );

	return 0L;

}
  



  Regget.h に以下を記述

  
extern "C" {  
__declspec(dllexport) LONG GetLocalMachineKeyValue( LPTSTR KeyString, LPTSTR Entry, LPTSTR Value );
}
  



  ビルド

1) ビルド --> アクティブな構成の設定 で、Release を選択
2) OK
3) ビルド



  Visual Basic から呼び出せるようにするには

関数定義と宣言を以下のように変更します

  
LONG __stdcall GetLocalMachineKeyValue( LPTSTR KeyString, LPTSTR Entry, LPTSTR Value )
  

  
LONG __stdcall GetLocalMachineKeyValue( LPTSTR KeyString, LPTSTR Entry, LPTSTR Value );
  

DEF ファイルをプロジェクトに追加します

  
EXPORTS
      GetLocalMachineKeyValue             @1
  

DLL プロシージャが引数として LPSTR (Null 終端文字列へのポインタ) を要求する場合は、BSTR を値渡し
で渡します。BSTR へのポインタは Null で終わる文字列データの先頭バイトへのポインタなので、DLL プロ
シージャでは LPSTR と同様に扱うことができます。

DLL プロシージャは、引数として受け取った文字列変数の内容を変更する可能性があります。DLL が変更
したデータが元の文字列変数のサイズより長いと、文字列変数の終端を越えて書き込まれるので、ほかの
データを破壊することになります。

このような DLL プロシージャの引数の文字列には、十分な長さを確保する必要があります。たとえば、
GetWindowsDirectory プロシージャは、Windows ディレクトリへのパスを最初の引数に返します。

  
Dim Path As String
Dim ReturnLength As Long
Path = String(255, vbNullChar)
ReturnLength = GetWindowsDirectory(Path, Len(Path))
Path = Left(Path, InStr(Path, Chr$(0))-1)
  

  
Dim Path As String * 255
Dim ReturnLength As Long
ReturnLength = GetWindowsDirectory(Path, Len(Path))
  




  Visual Basic から呼び出す

[Module1.bas]

  
Declare Function _
GetLocalMachineKeyValue Lib "C:\TEMP\NETINIT\VBTEST\REGGET.DLL" _
(ByVal KeyString As String, _
ByVal Entry As String, _
ByVal Value As String) As Long
  

[フォームのボタン]

  
Private Sub Command1_Click()

Dim strValue As String * 1024
Dim strKey As String
Dim strEntry As String

strValue = ""
strKey = "Software\Microsoft\Windows\CurrentVersion"
strEntry = "ProductName"
Call GetLocalMachineKeyValue(strKey, strEntry, strValue)

MsgBox (strValue)

End Sub
  












  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ