通过浮球的C#dllimport问题

通过浮球的C#dllimport问题,c#,c,dllimport,C#,C,Dllimport,我正在尝试让我的dll导入工作。 这是C中的当前导入# 这是来自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

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

这是来自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”参数是否有问题


谢谢你的帮助

据我们所知,您提供的代码是正确的。我们无法验证返回类型或调用约定,因此我们必须相信您已正确翻译它们。但是我们可以声明参数在您的pinvoke代码中被正确翻译


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

据我们所知,您提供的代码是正确的。我们无法验证返回类型或调用约定,因此我们必须相信您已正确翻译它们。但是我们可以声明参数在您的pinvoke代码中被正确翻译


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

下一页的表2.2表明,当c函数采用浮点数时,应该在c端使用
double
:我已经尝试过了。在这种情况下,它根本不起作用。当我使用double时,没有值被传递到DLL。谢谢代码看起来不错。我们只能假设您关于返回值类型和
cdecl
是正确的。我们无法证实这一点。但我们能证实的是正确的。如果您提供的代码中有错误,我们没有足够的信息进行诊断。很可能您提供的代码是正确的,DLL是四舍五入的!嗨@DavidHeffernan我只想知道这些!我还将DLL导入到LabView中,它在那里工作正常。所以我需要找出问题的根源。再次感谢。DLL使用的是单(32位)还是双(64位)?索引是否正确?下一页的表2.2表明,当c函数采用浮点时,应该在c端使用
double
:我已经尝试过了。在这种情况下,它根本不起作用。当我使用double时,没有值被传递到DLL。谢谢代码看起来不错。我们只能假设您关于返回值类型和
cdecl
是正确的。我们无法证实这一点。但我们能证实的是正确的。如果您提供的代码中有错误,我们没有足够的信息进行诊断。很可能您提供的代码是正确的,DLL是四舍五入的!嗨@DavidHeffernan我只想知道这些!我还将DLL导入到LabView中,它在那里工作正常。所以我需要找出问题的根源。再次感谢。DLL使用的是单(32位)还是双(64位)?索引正确吗?
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;
            }
        }