vc++如何调用.Ner Framewrok类库 ( 读写注册表示例)(CLI的一些应用)

网友投稿 258 2022-09-16

vc++如何调用.Ner Framewrok类库 ( 读写注册表示例)(CLI的一些应用)

.net Framework类库越来越丰富了。伴随vs2008已经3.5版本了。

以前写程序很少会去调用.net framework,不过随着微软的主推,和不断对其进行扩展。

其功能正在逐渐强大,使用更加简洁和方便。

这里通过对注册表的操作。我们来看看vc++.net程序。

说明:以下代码在vs2005下编译。

简单的说传统的c++如何调用net frame.

一些预备知识:

为什么会出现"^"符号呢?

在netframe下,为了保持托管堆上的对象的引用能够被垃圾收集器跟踪,且当这个对象被移动的时候,这个句柄可以被及时的更新。而传统的指针和引用无法被正确跟踪,所以产生了^来表示一个托管堆上对象的句柄。

其可以用->来访问其成员。

什么时候用 ^ 呢?

[ComVisibleAttribute(true)] public ref class RegistryKey sealed : public MarshalByRefObject, IDisposable

看到ref了吧,

以下三个例子应该很容易看懂了。

1. 将数据写入注册表

using namespace System;using namespace Microsoft::Win32;

int main(){    // The second OpenSubKey argument indicates that    // the subkey should be writable.     RegistryKey^ rk;

//托管堆上的一个句柄    rk  = Registry::CurrentUser->OpenSubKey("Software", true);

//静态成员可以通过其类名直接访问    if (!rk)    {        Console::WriteLine("Failed to open CurrentUser/Software key");        return -1;    }    RegistryKey^ nk = rk->CreateSubKey("NewRegKey");    if (!nk)    {        Console::WriteLine("Failed to create 'NewRegKey'");        return -1;    }

String^ newValue = "NewValue";    try    {        nk->SetValue("NewKey", newValue);        nk->SetValue("NewKey2", 44);    }    catch (Exception^)    {        Console::WriteLine("Failed to set new values in 'NewRegKey'");        return -1;    }

Console::WriteLine("New key created.");    Console::Write("Use REGEDIT.EXE to verify ");    Console::WriteLine("'CURRENTUSER/Software/NewRegKey'\n");*/    return 0;}

2. 从注册表中读取数据

using namespace System;using namespace Microsoft::Win32;int main( ){ array^ key = Registry::CurrentUser->GetSubKeyNames( ); Console::WriteLine("Subkeys within CurrentUser root key:"); for (int i=0; iLength; i++) { Console::WriteLine(" {0}", key[i]); } Console::WriteLine("Opening subkey 'Identities'..."); RegistryKey^ rk = nullptr; rk = Registry::CurrentUser->OpenSubKey("Identities"); if (rk==nullptr) { Console::WriteLine("Registry key not found - aborting"); return -1; } Console::WriteLine("Key/value pairs within 'Identities' key:"); array^ name = rk->GetValueNames( ); for (int i=0; iLength; i++) { String^ value = rk->GetValue(name[i])->ToString(); Console::WriteLine(" {0} = {1}", name[i], value); } return 0;} 3. 从注册表中删除subkey. RegistryKey^ rk; rk = Registry::CurrentUser->OpenSubKey("Software", true); if (!rk) { Console::WriteLine("Failed to open CurrentUser/Software key"); return -1; } rk->DeleteSubKey("NewRegKey");

写在后面的话:

之所有写这个标题,而不写有关CLI的,国内关于cli探讨还是比较少的。

既然,有人有好的建议,加一个副标题好了。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用bitset做十进制、二进制的转换
下一篇:通达信股票分析软件日线数据格式-股票数据格式大全,股票数据格式分析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~