传递浮点数的 C# dllimport 问题
C# dllimport problem with passing a float
我正在尝试让我的 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" 参数有问题吗?
感谢您的帮助!
据我们所知,您提供的代码是正确的。我们无法验证 return 类型或调用约定,因此我们必须相信您已正确翻译它们。但我们可以声明参数已在您的 pinvoke 代码中正确翻译。
最可能的解释是 DLL 正在截断此特定 属性 的值。
我正在尝试让我的 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" 参数有问题吗?
感谢您的帮助!
据我们所知,您提供的代码是正确的。我们无法验证 return 类型或调用约定,因此我们必须相信您已正确翻译它们。但我们可以声明参数已在您的 pinvoke 代码中正确翻译。
最可能的解释是 DLL 正在截断此特定 属性 的值。