【问题标题】:How to "fill" an IntPtr parameter with a float value?如何用浮点值“填充” IntPtr 参数?
【发布时间】:2009-06-12 09:17:19
【问题描述】:

我正在使用 dllImport 在 C# .NET 中使用 C 库。该库中的一种方法使用数据类型 void* 作为参数。我发现,我可以在 C# 中使用与 void* 匹配的数据类型 IntPtr。

现在我根本不知道如何设置这个 IntPtr 参数的值。事实上,我想在这个参数中放入一个浮点值。我该怎么做?

提前感谢您的任何想法。 西蒙娜

【问题讨论】:

  • 您希望浮点值按值传递还是按指针传递?所以'float'或'float *'而不是'void *'?
  • 您的问题可以通过三种不同的方式提出。您需要澄清问题以获得正确答案。这三种可能性是:(1)如何制作一个与 32 位浮点数完全相同的 32 位 intptr? (2) 如何制作一个包含浮点数的变量地址的 intptr?或者 (3) 如何获取包含给定变量地址的 intptr,并用给定的浮点数替换该变量的内容?

标签: c# floating-point dllimport intptr


【解决方案1】:

如果你可以使用不安全的块,这个可以:

static IntPtr IntPtrFromFloat( float f )
{
    unsafe
    {
        return (*(IntPtr*)&f);
    }
}

它创建一个 IntPtr,其中包含一个等于浮点数的二进制表示的地址。

也应该可以将参数声明为浮点数。无论如何它是 32 位 [假定为 32 位 C-DLL]。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 2023-03-19
    • 1970-01-01
    • 2020-08-04
    • 2014-04-25
    • 2010-11-05
    • 1970-01-01
    • 2018-12-09
    相关资源
    最近更新 更多