先回までに、ハッシュや暗号化を取り扱うマネージドクラスを使ったDLLの作成を紹介してきました。今回は、作成したDLLをVC++から呼び出す手順について紹介します。
マネージドクラス
詳細は手順は、先回の「VC++で.NETの SHA256Managed クラスを利用する(ハッシュ関数の実装)」で紹介していますが、VC++で作成したプロジェクトでも、C#のようにマネージドクラス(.NET Framework で提供されるクラス)を利用することが可能です。
VC++で作成するアプリケーションは、アンマネージドなプログラムであることが多いので、マネージドクラスを使う場合にはDLL化して本体プログラムと分離して、必要な場合に、呼び出す方が本体プログラムが受ける影響から解放されます。
また、ビルド時や他のライブラリとの互換性などを考慮に入れても、マネージドとアンマネージドのプログラムが共存させるよりは、開発が効率的になります。
通常のDLL呼び出しの手続き
先回の「VC++で.NETの SHA256Managed クラスを利用する(ハッシュ関数の実装)」で紹介したDLLを呼び出すには、次のような手順で行います。
LoadLibraryで引数にしている”MFCLibrary1.dll”は、DLLが保存されている場所に適宜変更してください。
CString Hash(CString sSource)
{
CString sResult = _T("");
HINSTANCE hInst = LoadLibrary(_T("MFCLibrary1.dll"));
if (hInst != NULL)
{
typedef long(*HASHSHA256)(CHAR*, CHAR*);
HASHSHA256 hashsha256;
hashsha256 = (HASHSHA256)(::GetProcAddress(hInst, "hashsha256"));
int nSize = sSource.GetLength();
char* pSource = new char[nSize + 1];
memset(pSource, 0x00, nSize + 1);
memcpy(pSource, sSource.GetBuffer(), nSize);
sSource.ReleaseBuffer();
nSize = hashsha256(pSource, NULL);
if (nSize > 0)
{
char* pHash = new char[nSize + 1];
memset(pHash, 0x00, nSize + 1);
nSize = hashsha256(pSource, pHash);
if (nSize > 0)
{
sResult = CString(pHash);
}
delete[] pHash;
pHash = NULL;
}
delete[] pSource;
pSource = NULL;
FreeLibrary(hInst);
}
return sResult;
}
マネージドでもアンマネージでも、DLLの呼び出し手続きに変更はありません。
日本語の文字列を引数などで利用する場合には文字コードの部分で工夫が必要になるケースもありますが、数値などのデータの場合には特に気にすることなくDLLの関数に値を引き渡すことができます。
こんな感じで、外部DLLを利用することでアンマネージのプログラムから、.NET Frameworkを利用した外部ライブラリを利用することが可能になります。
スポンサーリンク
最後までご覧いただき、ありがとうございます。