c# - MarshalAs 属性案例研究

标签 c# dll marshalling native-methods

我们什么时候应该使用这个属性,为什么我们需要它?例如,如果 c 中的 native 函数将指向 unsigned char 的指针作为参数,并且我知道需要它来完成 unsigned char 数组,为什么我不能在 C# 中使用字节数组来使用此函数?有必要编码吗?

最佳答案

在大多数情况下,运行时将能够自动确定如何在 native 代码和托管代码之间编码数据,因此您通常不需要指定该属性。 MarshalAs 仅在定义中存在歧义(并且您想准确地告诉运行时如何编码数据)或您需要非默认行为时才需要。

根据我的经验,MarshalAs 只有在处理字符串时才是真正需要的,因为在 native 代码中有很多不同的表示形式; unicode/ansi,是否使用 C 字符串,等等。

关于c# - MarshalAs 属性案例研究,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6366850/

相关文章:

c# - 在普通的旧 Dictionary<string,object> 上使用 MemoryCache 的令人信服的理由是什么

c++ - 将 Windows 可执行文件用作 DLL 时如何初始化 C 运行时

c++ - 通过头文件确定.lib/.dll

c++ - 测试 C++ dll 函数

json - Golang 运行时 : goroutine stack exceeds 1000000000-byte limit

ruby - 是否可以在 c 扩展中编码解释的 ruby​​ 代码数据以加快加载时间?

c# - Visual Studio Pro 是否随 SQL Server 一起提供?

c# - 有没有办法通过 SMB 共享上的创建时间来枚举文件?

c# - 我的单元测试是否关心太多

c# - 将可写 StringBuilder 数组从 C# 传递到 C++