私はこれについて間違っていると思います。私はMSRタイプのオブジェクトのSOの作成に取り組んでいます。そしてデフォルトで(私が正しく読んだ場合)OPOSはユニコードを使用します。そこで、C ++自動クラスにもUnicodeを使用させましたが、私が理解していることから、それを回避する方法はありません。OPOSヘッドクラスには2つの文字列定義があり、3つ目は私の作成したものです。
#define OPOS_ROOTKEY "SOFTWARE\\OLEforRetail\\ServiceOPOS"
#define OPOS_CLASSKEY_MSR "MSR"
#define OPOSMSR OPOS_ROOTKEY "\\" OPOS_CLASSKEY_MSR "\\"
これは、人がレジストリにアクセスできるようにするためです。そこで、すべてをSOに含めるのではなく、自分自身をレジストリヘルパークラスにすることにしました。最終的にこれをどのように行うべきかを理解するのに苦労しているようです。持っていた別のSOから作業コードをコピーしましたが、そのコードが正しく作成されていないと感じており、最初から正しく作成したいと思っています。
それでこれを思いついたのですが、文字列とクラス名を組み合わせる方法がわかりません。コンストラクターでパラメーターとしてクラス名を作成しました。
RegistryHelper::RegistryHelper(LPCTSTR deviceName) {
cout << "RegistryHelper::RegistryHelper()+" << endl;
baseOpen = true;
CString test;
test.Format("%s%s",OPOSMSR, theClass); //fail
REGSAM access = KEY_READ | KEY_WOW64_64KEY;
LONG nError = RegOpenKeyEx(HKEY_LOCAL_MACHINE, theClass ,0, access,&hBaseKey); //not what I want, but would compile, I want test here instead of theClass
if (nError != ERROR_SUCCESS) {
cerr << "(E)RegistryHelper::RegistryHelper(): Failed to load base key. [" <<(int)nError << "]" << endl;
RegCloseKey(hBaseKey);
baseOpen = false;
}
cout << "RegistryHelper::RegistryHelper()-" << endl;
}
私が間違っていることについてのヒントはありますか?私はこのテーマに取り組んでいるので、このためのすべてのコードを投稿します。どれくらい悪い?
私が求めているのはこんな感じです
unsigned int baud;
char* parity;
bool MSRSO::LoadRegistryValuesIntoMemory(LPCSTR deviceName) {
RegistryHelper reg(deviceName);
bool required = reg.LoadDWORD("BaudRate", 19200, baud);
required = required && reg.LoadREGSZ("Parity", "NONE", parity);
//other values
reg.Close();
return required;
}
私はC#とJavaの人なので、データ型が間違っている可能性があることに注意してください。昔は、SUPERの古いLinuxボックスでC++で簡単なHelloWorldプログラムと一時変換プログラムを作成しただけでした。私はC++で良くなっていますが、それでもまだ慣れていません。では、#define型のデータ型は何ですか?LPCTSTRと組み合わせるにはどうすればよいですか?レジストリ値にのみアクセスできるようにするために、これを行う必要がありますか?
ありがとうございました。