【问题标题】:Using floats in Windows DLL function parameters在 Windows DLL 函数参数中使用浮点数
【发布时间】:2009-05-27 19:43:14
【问题描述】:

我正在用 C++ 编写一个非托管 DLL。在 Windows DLL 中使用 float 作为函数参数是个好主意吗?

我希望我的 DLL 可用于尽可能多的语言(VB6、.NET 等)。为此,我使用了 STDCALL 并避免使用 C++ 类型。

大多数语言都能正确处理浮点数吗?如果没有,我应该使用什么?

【问题讨论】:

    标签: c++ windows dll


    【解决方案1】:

    大多数编译器中使用的float 类型甚至以某种 IEEE 格式标准化,所以继续吧。

    【讨论】:

    • 这是 IEEE 754,适合好奇的人。
    【解决方案2】:

    所有 Microsoft 语言,例如 VB 和 C# 都可以使用它。事实上,使用VARIANTs 支持的任何类型都应该没问题。

    【讨论】:

      【解决方案3】:

      诀窍是弄清楚如何将调用语言中的值“编组”为 dll 中函数所期望的类型。很多时候,调用语言中的数据类型与 C 使用的类型相似但略有不同。发生这种情况时,您需要一种方法将值复制到 C 类型中,然后将其传递给 DLL。

      希望 MSDN 中的这篇文章可以帮助您入门:

      http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.aspx

      【讨论】:

      • 我想我的问题是我是否需要 Marshall 浮动在一个 straigh C++ DLL(非托管)中。
      • @jm:浮点数是 blittable 类型,在 C# 端看起来与在 C++ 中相同。见这篇文章:msdn.microsoft.com/en-us/library/75dwhxf7.aspx
      【解决方案4】:

      简短的回答是,主流语言将处理浮点参数到 DLL 函数,几乎没有开销。

      您可以使用任何基本的 C 数据类型,如果调用代码无法处理它,那么问题就出在他们身上,而不是您的问题上,因为您生成了一个完全有效的 DLL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-10
        • 2019-11-29
        • 1970-01-01
        • 2011-10-09
        • 2020-03-31
        相关资源
        最近更新 更多