C++/CLI中的默认属性访问

23 篇文章 1 订阅
15 篇文章 0 订阅

目前版本的VC2005测试版中,default关键字不仅用于指定类级别的索引器,而且也用于访问默认属性。但是奇怪的是,默认属性的原名不能访问了,也就是说,如果要把下面的代码段从托管C++移植到VC2005附带的C++/CLI,不仅需要更改指针的类型,而且要把属性的名称更改为default:

//[System::Reflection::DefaultMemberAttribute("Fields")] interface _Recordset

//托管C++语法
//extern _Recordset* results;
Fields* ResultFields=results->Fields;

//C++/CLI语法
//extern _Recordset^ results;
Fields^ ResultFields=results->default;

如果继续使用原来名字来访问属性的话,会报告编译错误:

Fields^ ResultFields=results->Fields;//C3293: 'Fields': use 'default' to access the default property (indexer)

这是一个Breaking Change。在语言规范中,默认索引属性只使用一个名字“default”,而且只有这一个实现。更进一步,默认索引属性只能用如下方式访问:

  • obj[index]
  • obj->default[index]
  • obj->default::get(index)
  • obj->default::set(index, value)

顺便说一下,在C++/CLI中也可以使用类似C#里面的for each语句了( http://msdn2.microsoft.com/library/ms177202(en-us,vs.80).aspx),而且对于非托管的STL容器也有效,不过看起来真不习惯。

参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的示例,演示如何在 C++/CLI 封装 VB.NET DLL 的 API: 1. 在 VB.NET 创建一个 DLL 文件 首先,在 VB.NET 创建一个名为 "MyLibrary" 的 Class Library 项目,并在其添加以下代码: ``` Public Class MyAPI Public Function AddNumbers(ByVal num1 As Integer, ByVal num2 As Integer) As Integer Return num1 + num2 End Function End Class ``` 然后,编译该项目并生成 MyLibrary.dll 文件。 2. 在 C++/CLI 添加对 VB.NET DLL 的引用 打开一个 C++/CLI 项目,并在其添加对 MyLibrary.dll 的引用。具体步骤如下: - 在 "解决方案资源管理器" ,右键单击 "引用",选择 "添加引用"。 - 在 "添加引用" 窗口,点击 "浏览" 按钮,并选择 MyLibrary.dll 文件。 - 点击 "确定",完成添加引用的操作。 3. 在 C++/CLI 创建 public ref class 在 C++/CLI 创建一个名为 "MyWrapper" 的 public ref class,用于封装 MyLibrary.dll 的 API。具体代码如下: ``` #include "stdafx.h" #include <msclr\auto_gcroot.h> using namespace System; using namespace MyLibrary; public ref class MyWrapper { public: MyWrapper() { // 初始化 VB.NET API 对象 m_api = gcnew MyAPI(); } int AddNumbers(int num1, int num2) { // 调用 VB.NET API 的 AddNumbers 方法 return m_api->AddNumbers(num1, num2); } private: // 使用 auto_gcroot 包装 VB.NET API 对象 msclr::auto_gcroot<MyAPI^> m_api; }; ``` 需要注意的是,这里使用了 "msclr\auto_gcroot.h" 头文件,以便在 C++/CLI 包装 VB.NET 对象。 4. 编译并使用封装的 API 将 MyWrapper 编译为 DLL 文件后,即可在其他应用程序使用该 DLL 文件,并调用其的 AddNumbers 方法,例如: ``` #include <iostream> #include "MyWrapper.h" using namespace std; int main() { MyWrapper^ wrapper = gcnew MyWrapper(); int result = wrapper->AddNumbers(1, 2); cout << "The result is: " << result << endl; return 0; } ``` 运行该应用程序后,将输出 "The result is: 3"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值