Запуск команды из .dll написанной на C в программе на VB.net

nuspace
Дата: 28.04.2014 16:22:37
Здравствуйте!

Я столкнулась со следующей проблемой. Есть .dll файл (написанный, скорей всего на С), содержащий команды, которые я запускаю из программы на VB.net.

Собственно вопрос. На С команда выглядит так :

DWStatus DWOpenDataFile (char* file_name, DWFileInfo* file_info)


DWFileInfo включает в себя double sample_rate, double start_store_time, double duration (насколько я понимаю - эта функция возвращает свойства открываемого файла).

Я пытаюсь запустить команду следующим способом (уверена, что типы параметров указаны не совсем верно):

Private Declare Function DWOpenDataFile Lib "D:\DWDataReaderLib_stdcall" Alias "_DWOpenDataFile@8" (ByVal file_name As String,
                                                                                                    ByVal sample_rate As Double,
                                                                                                    ByVal start_store_time As Double,
                                                                                                    ByVal duration As Double)

 Public Function OpenD7DFile(ByVal file_name As String,
                             ByVal sample_rate As Double,
                             ByVal start_store_time As Double,
                             ByVal duration As Double) As Object
        OpenDataFile = DWOpenDataFile(file_name)
        Dim OpenDataFile As Integer
        file_name = "C:\test.d7d"
 End Function
        

что приводит к ошибке pInvokeStackImbalance. Или в данном случае требует объявить аргументы для sample_rate, duration, start_store_time. Подскажите, что я делаю не так? Как правильно задать параметры ? Буду благодарна и за направление, в котором копать.
Изопропил
Дата: 28.04.2014 16:49:54
nuspace
(уверена, что типы параметров указаны не совсем верно):

совсем неверно

второй параметр - адрес структуры, передавать структуру - по ссылке
nuspace
Дата: 28.04.2014 16:58:42
Изопропил,

Спасибо за совет.
Если не затруднит - можно ли какой-то пример, как это работает в VB.net?
Изопропил
Дата: 28.04.2014 17:52:06
nuspace,

если бы C-шные заголовочные файлы (*.h) были бы здесь - было бы удобнее


а примеры(из WinAPI) можно смотреть на сайте http://pinvoke.net/
nuspace
Дата: 28.04.2014 18:22:45
Изопропил,

в приложении файлы, что предоставила компания. За ссылку спасибо, займусь изучением.
Изопропил
Дата: 28.04.2014 18:59:07
nuspace,

используйте лучше синтаксис с атрибутом DllImportAttribute, чем declare - что из совместимости со старым бейсиком,
большинство примеров, что найдёте - будет с атрибутом
nuspace
Дата: 29.04.2014 10:20:50
Изопропил,

Спасибо за совет, попробую так.