Страница: 1 | 2 |
Вопрос: Можно ли из VB вызвать функцию С
Добавлено: 06.05.05 22:53
Автор вопроса: genadz
Имеется функция С доступа к DLL:
int MtConnect(const int handle,const char *server,const int port);
Подскажите новичку, можно ли из VB вызвать эту функцию, как ее правильно определить и как передать параметры? Заранее спасибо.
Ответы
Всего ответов: 22
Номер ответа: 1
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #1
Добавлено: 06.05.05 23:02
private declare function MtConnect lib "dllname.dll" (byval handle as long, byval server as string, byval port as long) as long
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 06.05.05 23:24
Может, причем по-видимому VB самостоятельно определяет что функция не stdcall а cdecl, к примеру после вызова wsprintf, VB, аккуратно добавляет к регистру esp нужные байты...
Номер ответа: 3
Автор ответа:
genadz
Вопросов: 1
Ответов: 7
Профиль | | #3
Добавлено: 06.05.05 23:44
Вот такой код
Option Explicit
Dim handle As Long
Dim port As Long
Dim server As String
Private Declare Function MtConnect Lib "mtapi.dll" (ByVal handle As Long, ByVal server As String, ByVal port As Long) As Long
Private Sub Form_Load()
handle = 1
server = "217.74.32.254"
port = 1950
Dim iserr As Integer
iserr = MtConnect(handle, server, port)
End Sub
Выдает: Bad DLL calling convention
Номер ответа: 4
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #4
Добавлено: 06.05.05 23:45
Добавление к esp нужных байтов не имеет отношения к cdecl или stdcall. Это делается для того, чтобы выравнять стек по границе дворда, что нужно для последующей корректной очистки стека. (wsprintf может принимать третьим операндом и байт и ворд и дворд).
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 06.05.05 23:59
Многоуважеемый HOOLIGAN, к вашему сведению функции по соглашений stdscall - выравнивают стек сами (RETN кол-во байт), по cdecl - это должна сделать вызывающая функция (в конце функции RETN, после вызова add esp, xxx).
К вашему сведению, wsprintf может принимать не три параметра а более, т.к. она подчиняется соглашению cdecl, и кол-во аргументов в ней - переменное.
Так что давайте не будем умничать, а просто помолчим, иначе, чувствую, мне прийдется переубеждать кого-то в обратном, а лишних забот мне не надо...
Номер ответа: 6
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #6
Добавлено: 07.05.05 00:01
2genadz, у мня такой длл вовсе нет
Номер ответа: 7
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #7
Добавлено: 07.05.05 00:03
genadz
Попробуй так:
Private Declare Function MtConnect CDecl Lib "mtapi.dll" (ByVal handle As Long, ByVal server As String, ByVal port As Long) As Long
P.S.
О esp: попутал до и после вызова
Номер ответа: 8
Автор ответа:
genadz
Вопросов: 1
Ответов: 7
Профиль | | #8
Добавлено: 07.05.05 00:10
Попробовал, результат тот же
Номер ответа: 9
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #9
Добавлено: 07.05.05 00:13
А что за библиотека, откуда декларация??? Ведет себя одинаково и в IDE и в откомпилированном виде ??
Номер ответа: 10
Автор ответа:
genadz
Вопросов: 1
Ответов: 7
Профиль | | #10
Добавлено: 07.05.05 00:30
Декларация из описания использования DLL. Описание довольно большое, а как прицепить файл на этом форуме я не знаю.
Номер ответа: 11
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #11
Добавлено: 07.05.05 00:32
На форуме нельзя цеплять файлы , выложи куда-нить...
Номер ответа: 12
Автор ответа:
genadz
Вопросов: 1
Ответов: 7
Профиль | | #12
Добавлено: 07.05.05 00:44
Не нашел ничего лучшего как направить на e-mail. Помогите разобраться пожалуйста.
Номер ответа: 13
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #13
Добавлено: 07.05.05 00:59
Описание - хорошо, но я же сказал - у меня самой библиотеки нет
Номер ответа: 14
Автор ответа:
genadz
Вопросов: 1
Ответов: 7
Профиль | | #14
Добавлено: 07.05.05 01:16
А это ссылка где лежит эта DLL с описанием и примерами использования на С http://www.alpari-idc.ru/files/mtapi.zip
Номер ответа: 15
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #15
Добавлено: 07.05.05 01:51
2genadz, перреписывай полностью весь код а не кусками, инициализацию winsock, создание сокета, а не просто handle = 1, и пр.
Кста, при запуске откомпилированного exe у меня не происходит ошибки Bad Dll Conversion...