Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: sharpc.livejournal.com
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #15
Добавлено: 07.05.05 01:51
2genadz, перреписывай полностью весь код а не кусками, инициализацию winsock, создание сокета, а не просто handle = 1, и пр.

Кста, при запуске откомпилированного exe у меня не происходит ошибки Bad Dll Conversion...

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам