安装钩子,托管C++中的字符串及其它
2006-07-20 11:42:41 来源:WEB开发网RefTest 使用了一个用 C++ 写的类库。ErrMsg 是一个托管类,它有两个方法,Message1 和 Message2,这两个方法将其 String 参数分别赋值为“Hello, world #1”和“Hello, world #2”,一个使用 String** 另一个使用 String*&。两种方法,不管是调用 Message1 还是 Message2,C# 调用者都必须用 ref 关键字。
“ref”对于两种情况都是必须的。如果你去掉它,便会有“error CS1503: Argument ''1'': cannot convert from ''string'' to ''ref string''.”错误。注意:用 str=NULL 调用 Message1 是合法的。对于你的 C++ 函数,str 不是 NULL,它是一个空引用。如果你的函数存取传递的 String,你应该注意这一点。例如:
int ErrMsg::Message1(String*& str)
{
int len = str->Length;
...
}
这样编译没问题,但如果调用者传递 str=NULL,那么它丢出一个异常。你应该重写代码仔细处理 str=NULL 的情况,就像下面这样:
int ErrMsg::Message2(String*& str)
{
if (str==NULL)
return -1;
...
}
那么,到底使用哪一个呢——指针还是饮用?我个人更喜欢引用(&),因为它反映的是 ref,看起来更简洁,反引用对象时也容易。
关于声明的问题讲了够多的了,下面是最后一个问题。如何加载资源串?正像你发现的,在 String 类中找不到 LoadString 方法。那是因为 .NET 框架不象 Windiws 那样处理资源,.NET 框架完全采用不同的方法,我在 2002 年 11 月的 MSDN 杂志文章中有过描述(参见:“.NET GUI Bliss: Streamline Your Code and Simplify Localization Using an XML-Based GUI Language Parser”),我是这样认为的:“无限的灵活性,但哪怕是一个小小的任务都很繁琐”。
- ››安装与卸载Win 8双界面应用程序
- ››安装CentOS的注意事项
- ››安装 Intel C++ Compiler 12 以后,VC6 不能编译的...
- ››安装win 8 让Win7与Win8双系统共存
- ››安装YLMF OS及VBox增强功能
- ››安装EPP的调试Zend Debugger
- ››安装并配置SQL Server 2005群集
- ››安装WebSphere WAS应用服务器
- ››安装Android开发工具
- ››安装和卸载Android应用程序(apk包)的命令
- ››安装APK文件到Android模拟器和Android sdcard的使...
- ››安装CentOS oracle过程设置使用解压包
更多精彩
赞助商链接