【发布时间】:2009-05-27 19:43:14
【问题描述】:
我正在用 C++ 编写一个非托管 DLL。在 Windows DLL 中使用 float 作为函数参数是个好主意吗?
我希望我的 DLL 可用于尽可能多的语言(VB6、.NET 等)。为此,我使用了 STDCALL 并避免使用 C++ 类型。
大多数语言都能正确处理浮点数吗?如果没有,我应该使用什么?
【问题讨论】:
我正在用 C++ 编写一个非托管 DLL。在 Windows DLL 中使用 float 作为函数参数是个好主意吗?
我希望我的 DLL 可用于尽可能多的语言(VB6、.NET 等)。为此,我使用了 STDCALL 并避免使用 C++ 类型。
大多数语言都能正确处理浮点数吗?如果没有,我应该使用什么?
【问题讨论】:
大多数编译器中使用的float 类型甚至以某种 IEEE 格式标准化,所以继续吧。
【讨论】:
所有 Microsoft 语言,例如 VB 和 C# 都可以使用它。事实上,使用VARIANTs 支持的任何类型都应该没问题。
【讨论】:
诀窍是弄清楚如何将调用语言中的值“编组”为 dll 中函数所期望的类型。很多时候,调用语言中的数据类型与 C 使用的类型相似但略有不同。发生这种情况时,您需要一种方法将值复制到 C 类型中,然后将其传递给 DLL。
希望 MSDN 中的这篇文章可以帮助您入门:
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.aspx
【讨论】:
简短的回答是,主流语言将处理浮点参数到 DLL 函数,几乎没有开销。
您可以使用任何基本的 C 数据类型,如果调用代码无法处理它,那么问题就出在他们身上,而不是您的问题上,因为您生成了一个完全有效的 DLL。
【讨论】: