WEB开发网
开发学院软件开发VC 安装钩子,托管C++中的字符串及其它 阅读

安装钩子,托管C++中的字符串及其它

 2006-07-20 11:42:41 来源:WEB开发网   
核心提示: RefTest 使用了一个用 C++ 写的类库,ErrMsg 是一个托管类,安装钩子,托管C++中的字符串及其它(7),它有两个方法,Message1 和 Message2,我在 2002 年 11 月的 MSDN 杂志文章中有过描述(参见:“.NET GUI Bliss: S

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”),我是这样认为的:“无限的灵活性,但哪怕是一个小小的任务都很繁琐”。

上一页  2 3 4 5 6 7 8  下一页

Tags:安装 钩子 托管

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接