【问题标题】:Equivalent of C++ reference type in C#C# 中 C++ 引用类型的等价物
【发布时间】:2009-09-17 18:20:10
【问题描述】:

我在 C# 应用程序中使用用 C++ 编写的 dll。 什么等价于

  1. char const *
  2. unsigned short

在 C# 中

谢谢

【问题讨论】:

  • LOADERDLL_API int CLoaderDLL::Open ( const char * pDevicePath )

标签: c# char constants


【解决方案1】:
  • C++ 中的char* 可以有不同的含义,例如指向字节数组或 ANSI 编码的空终止字符串的指针。因此,如何将值编组到 C# 取决于数据的含义。唯一肯定没有错的答案是:IntPtr

  • C++ 中的unsigned short 通常是一个 16 位无符号整数:UInt16(或 C# 中的 ushort)。

【讨论】:

【解决方案2】:

我查看了您问题的代码,我认为我的措辞更好(检查意图)。如果是这样,您正在寻找:

  1. stringbyte[],取决于变量在 C 代码中的使用方式。
  2. ushort假设您的 C 编译器生成的 unsigned short 是 16 位的。在 C# 中,ushort 始终为 16 位(而uint 始终为 32 位)。恭喜 MS 终于在这里给了我们一些一致性。 :)

【讨论】:

    【解决方案3】:

    要调用通过 DLLImport 公开的方法,您需要使用 IntPtr 类型的指针。

    请记住,在 C++ 中 char* 实际上是一个指向内存的指针,通常由一个 4 字节的 int 表示。

    【讨论】:

    • 你通常不想在编组中使用IntPtr,除非你必须(有时是编组器强加的,有时是C代码中的底层用法)——只要byte[]或@ 987654323@工作他们更安全,更有意义。
    猜你喜欢
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2021-02-10
    • 2016-11-27
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多