C#dllimport问题与传递浮点数

时间:2019-04-30 12:28:33

标签: c# c dllimport

我正在尝试使dll导入正常工作。 这是C#中的当前导入

[DllImport(SpectrumDll, ExactSpelling = true, PreserveSig = true, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
    //SCLIB_ERROR_CODE DLLEXPORT SPECTRUM_SetUserFloat(char *name, float value, int index); 
    public static extern SCLIB_ERROR_CODE SPECTRUM_SetUserFloat([MarshalAs(UnmanagedType.LPStr)] string name, float value, int index);

这是dll头文件中的C调用。

SCLIB_ERROR_CODE DLLEXPORT SPECTRUM_SetUserFloat(char *name, float value, int index);

这就是我在代码中的称呼方式。

public bool SetUserFloat(string varName, float value, int index = 0)
        {
            try
            {
                var res = spectrum_dll_import.SPECTRUM_SetUserFloat(varName, value, index);
                return true;
            }
            catch (Exception exc)
            {
                return false;
            }
        }

该函数可以自行运行,但是会切断逗号后面的部分。 因此,如果我想编写“ 5.343F”,则C DLL设置的值为“ 5.000”

我的“ dllimport”和“ float”参数有问题吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

据我们所知,您提供的代码是正确的。我们无法验证返回类型或调用约定,因此我们将不得不相信您已正确翻译了它们。但是我们可以说这些参数已在pinvoke代码中正确翻译。

最可能的解释是DLL正在截断此特定属性的值。