C # dllimport проблема с передачей поплавка - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь заставить работать мой импорт 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);

Это вызов C из файла заголовка dll.

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 Ответ

2 голосов
/ 30 апреля 2019

Код, который вы предоставляете, является правильным, насколько мы можем судить. Мы не можем проверить тип возвращаемого значения или соглашение о вызовах, поэтому мы должны доверять, что вы их правильно перевели. Но мы можем утверждать, что аргументы правильно переведены в ваш код pinvoke.

Наиболее вероятное объяснение состоит в том, что DLL усекает значение для этого конкретного свойства.

...