Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2015, 12:39   #1
Александр Че
 
Регистрация: 08.11.2015
Сообщений: 6
По умолчанию Подключение сторонней dll

Доброго всем дня. Подскажите пожалуйста:
есть сторонняя DLL необходимо воспользоваться её функциями,
есть хелп, но написан он явно не для vb net,
подскажите как правильно написать для vb?

в хелпе так:
long theirlibrary (double* _mode, int geometry, int tubesType, int finSpace)

theirlibrary- функция в dll с которой нужно разобраться

так или нет:
Public Declare Function myfunc Lib "c:/library" Alias "theirlibrary " (ByVal mode As double, ByVal geometry As Integer, ByVal tubesType As Integer, ByVal finSpace As Integer)

Всё непонятно но особенно * - при объявлении, читал что это вроде адрес переменной, а не её значение,
как это написать на vb подскажите пожалуйста.
Александр Че вне форума Ответить с цитированием
Старый 08.11.2015, 12:45   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

https://www.google.com/search?q=dllimport
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 08.11.2015, 14:27   #3
Александр Че
 
Регистрация: 08.11.2015
Сообщений: 6
По умолчанию

Теперь вот такая штука, (но правда с горем пополам работает)

A call to PInvoke function 'WindowsApplication5!WindowsApplica tion1.Example::theirlibrary' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

Помогите по русски понять пожалуйста
Александр Че вне форума Ответить с цитированием
Старый 08.11.2015, 14:57   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну написано ж что указанные параметры и т.п. функции в .NET программе скорее всего не соответствуют тому, что на самом деле.

Код-то покажите.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.11.2015, 01:10   #5
Александр Че
 
Регистрация: 08.11.2015
Сообщений: 6
По умолчанию

так написано в хелпе
long функция(int mode, int geometry, int tubesType, int finSpacе.....
<DllImport("эта.dll", EntryPoint:="функция", CallingConvention:=CallingConventio n.Cdecl, CharSet:=CharSet.Ansi)> _
Public Function функция(ByVal mode As Integer, _
ByVal geometry As Integer, _
ByVal tubesType As Integer, _
ByVal finSpacе As Integer, _.....) as long
и она чегото считает но не то
Александр Че вне форума Ответить с цитированием
Старый 10.11.2015, 10:00   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не видите никакого несоответствия между "Integer" и "double*"?
Скорее всего надо либо double[] (в смысле массив double, может быть в VB.NET не такой синтаксис для них как в C#), либо IntPtr (просто указатель).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.11.2015, 11:18   #7
Александр Че
 
Регистрация: 08.11.2015
Сообщений: 6
По умолчанию

Спасибо за совет, но чёта я не пойму
все переменные я боле-мене объявил int-ineger, double-double...
сейчас эксперименты с ByVal и ByRef
массивы в хелпе обозначены правда для другой функции
а здесь ещё эти double* и char**
есть правда и просто double
скажите int в C# тоже что integer для VB
Александр Че вне форума Ответить с цитированием
Старый 10.11.2015, 11:19   #8
Александр Че
 
Регистрация: 08.11.2015
Сообщений: 6
По умолчанию

Да и ещё это как IntPtr (просто указатель)
Александр Че вне форума Ответить с цитированием
Старый 10.11.2015, 11:45   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

IntPtr это указатель, вроде его можно использовать там, где в C/C++ dll были любые указатели (double*, int*, SomeType*, ...).
https://www.google.com/search?q=intptr+dllimport

Но тут наверно массив double нужен, а не это. Или что функция делает вообще? _mode для чего используется?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 10.11.2015, 15:57   #10
Александр Че
 
Регистрация: 08.11.2015
Сообщений: 6
По умолчанию

mode переменная которая будет браться из базы. значения 1,2,3,4 тип оборудования.
какой должен быть результат у функции (long) я не знаю, но явно не такой, что она не работает я понял из того, что она реагирует только на изменение mode, а переменных штук 50. Массивы в хелпе подписаны array. Вот * это что значит для типа переменной.
Александр Че вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли создать библиотеку импорта для сторонней DLL? taras-proger Win Api 16 14.09.2015 12:39
Подключение сторонней библиотеки pupsus Visual C++ 2 03.05.2015 10:17
подключение dll Voipp C# (си шарп) 2 08.07.2013 17:23
Управление устройством: проблемы с типами данных в сторонней DLL AnTe Общие вопросы Delphi 13 19.06.2013 13:55
Получение данных из сторонней dll Memfis1992 Общие вопросы Delphi 4 21.10.2010 09:19