C# 托管非托管代码

Posted

技术标签:

【中文标题】C# 托管非托管代码【英文标题】:C# Managed Unmanaged code 【发布时间】:2011-05-23 03:55:03 【问题描述】:

我正在尝试理解与结构和类有关的托管/非托管代码。我有一个结构,它具有另一个结构的属性,但它的指针声明如下:

struct StateInfo

   Bitboard board;
   StateInfo* previous;

我正在将 C++ 项目转换为 C#。无论如何,这不起作用,因为 Bitboard 是一个类。我得到的错误是指针不能在托管类型上声明的事实。如果我从结构中取出 Bitboard,那很好。不过我需要它,所以我将 Bitboard 从一个类更改为一个结构,一切都很好。我不知道怎么了?有什么想法吗?

【问题讨论】:

【参考方案1】:

您可能甚至不想要struct。而是:

class StateInfo

   Bitboard board;
   StateInfo previous;

在 C# 中,struct 是一种值类型。例如,intstruct。它们通常应该用于完全由它们的值描述的事物。

【讨论】:

【参考方案2】:

我建议你阅读一下blittability。

Blittable 类型在托管和非托管代码中具有相同的二进制表示,如果您希望指针有意义,则需要以相同的方式表示它们。

【讨论】:

感谢您的回答。我会查看链接以供阅读。【参考方案3】:

本质上,在c#中所有的对象都是自动的指针,不需要释放。

尝试阅读一些关于从 C++ 迁移到 C# 的过渡性文章 C++ -> C#: What You Need to Know to Move from C++ to C#

【讨论】:

如果您阅读那篇文章就会注意到,没有“C#.NET”之类的东西。该语言被命名为“C#”。我还要提醒读者这篇文章已有十年历史了。这两种语言在过去十年中都有所发展。

以上是关于C# 托管非托管代码的主要内容,如果未能解决你的问题,请参考以下文章

C# 托管非托管代码

从 C# 线程调用非托管代码

将非托管 EXE 作为资源合并到托管 C# 代码中

C# 托管和非托管混合编程

浅析C#中的托管非托管堆栈与垃圾回收

浅析C#中的托管非托管堆栈与垃圾回收