вызов функций из dll в VB

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
doctor_noname
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 07.12.2009 (Пн) 16:39

вызов функций из dll в VB

Сообщение doctor_noname » 15.12.2009 (Вт) 15:15

есть Cшная dll с экспортированными функциями и визуальный интерфейс на VB.
если экспортировать так:

Код: Выделить всё
extern "C" __declspec(dllexport) void Function1(...)

объявить в ВБ так:
Код: Выделить всё
Public Declare Function Function1 lib "..." (...)

то ВБ не видит функцию.

если так:
Код: Выделить всё
extern "C" __declspec(dllexport) __stdcall void Function1(...)

то в ВБ надо объявлять так
Код: Выделить всё
Public Declare Function Function1 lib "..." Alias "_Function1@N" (...)
, N - общий размер параметров в байтах

Можно ли таким образом экспортировать функцию из длл и объявить в ВБ, чтоб названия функции в коде длл и в экспортном варианте совпадали?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: вызов функций из dll в VB

Сообщение Хакер » 15.12.2009 (Вт) 16:08

Все приведённые VB-объявления неверны: либо надо Function заменить на Sub, либо тип возврата с Variant заменить на элементарный, вроде Long, Byte и т.п., хотя первое правильнее.

Можно ли таким образом экспортировать функцию из длл и объявить в ВБ, чтоб названия функции в коде длл и в экспортном варианте совпадали?

Да, для этого надо объявить её в DEF-файле. При этом extern "C" __declspec(dllexport) не нужен, а вот __stdcall обязателен, если дефолтное соглашение отличается от stdcall, а оно по дефолту отличается и установлено как cdecl. За это отвечает флаг компилятора, и если ты пользуешься студией 200X, то можно выставить в свойствах проекта.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

doctor_noname
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 07.12.2009 (Пн) 16:39

Re: вызов функций из dll в VB

Сообщение doctor_noname » 15.12.2009 (Вт) 16:29

Хакер писал(а):Все приведённые VB-объявления неверны: либо надо Function заменить на Sub, либо тип возврата с Variant заменить на элементарный, вроде Long, Byte и т.п., хотя первое правильнее.

Для void функций использую sub при объявлении, для остальных function.

Хакер писал(а):Да, для этого надо объявить её в DEF-файле.

Спасибо.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: вызов функций из dll в VB

Сообщение Mikle » 15.12.2009 (Вт) 17:05

Или вместо def можно так:
#pragma comment(linker, "/export:_Function1@8=Function1")

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: вызов функций из dll в VB

Сообщение Хакер » 15.12.2009 (Вт) 17:11

Не гуд, изменение прототипа потребует изменения этой строчки.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 26

    TopList  
cron