如何将 unsigned char __gc[]转换成buffer呀?

runi 2004-12-15 01:09:16
VC我不懂。帮帮忙吧,多谢了!
...全文
77 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
youwanna 2004-12-16
  • 打赏
  • 举报
回复
UP
贴点代码看看啊
wangxt 2004-12-16
  • 打赏
  • 举报
回复
帮你顶
真相重于对错 2004-12-16
  • 打赏
  • 举报
回复
C++ 托管扩展参考

__pin请参见
C++ 托管扩展参考 | C++ 关键字 | PinningPtr 示例
防止托管类的对象或嵌入对象在垃圾回收期间被公共语言运行库移动。

__pin identifier
备注
__pin 关键字声明指向托管类的对象或嵌入对象的指针,并防止该对象在垃圾回收期间被公共语言运行库移动。这在将托管类的地址传递给非托管函数时是有用的,因为该地址不会在解析非托管函数调用期间被意外地更改。有关 __pin 的更多信息,请参见 7.7 固定指针。

钉住指针在词法范围内保持有效。一旦钉住指针离开范围,则对象不再被视为处于钉住状态(当然,除非存在其他钉住指针指向或指入该对象)。

MSIL 没有“块范围”的概念,即所有局部变量都在函数范围内有效。为了使系统知道钉住指针不再有效,编译器生成将值 NULL 分配给钉住指针的代码。如果需要取消钉住而又不离开块,则您自己也可以完成此操作。

不应将钉住指针转换为非托管指针并在对象不再被钉住后(即钉住指针离开范围之后)继续使用该非托管指针。与 gc 指针不同,钉住指针可以转换为非托管的 nogc 指针。但是,当使用非托管指针时,用户有责任维持钉住指针。此示例为不应进行的操作:

__gc struct X
{
int x;
};

int* Get_x( X* pX )
{
int __pin* ppx = &pX->x;
return ppx;
// DANGER: ppx goes of scope, so object pointed by it is no
// longer pinned, making the return value unsafe.
}
不应进行如下操作:使用已钉住指针获得变量的地址,然后在钉住指针离开范围后使用该地址。

// keyword_pin_scope_bad.cpp
// compile with: /clr /LD
#using <mscorlib.dll>
__gc struct X
{
int x;
};

int* Get_x( X* pX )
{
int __pin* px = &pX -> x;
return px; // BE CAREFUL px goes of scope,
// so object pointed by it is no longer pinned,
// making the return value unsafe.
}
// keyword_pin_scope_good.cpp
// compile with: /clr /LD
#using <mscorlib.dll>
__gc struct X
{
int x;
};

int Get_x( X* pX )
{
int __pin* px = &pX -> x;
return *px; // OK, value obtained from px before px out of scope
}
示例
在下面的示例中,pG 指向的对象被一直钉住,直到它移动到范围外:

// keyword__pin.cpp
// compile with: /clr /EHsc
#using <mscorlib.dll>
#include <iostream>

__gc class G
{
public:
int i;
G() {i = 0;};
};

class H
{
public:
// unmanaged function
void incr(int * i)
{
(*i)++;
std::cout << *i << std::endl;
};
};

int main()
{
G __pin * pG = new G; // pG is a pinning pointer
H * h = new H;
// pointer to managed data passed as actual parameter of unmanaged
// function call
h->incr(& pG -> i);
}
输出
1
请参见
C++ 托管扩展参考 | C++ 关键字 | PinningPtr 示例



--------------------------------------------------------------------------------

向 Microsoft 发送有关此主题的反馈

© Microsoft Corporation。保留所有权利。

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧