Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/22: Рейтинг темы: голосов - 22, средняя оценка - 4.77
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149

Visual Basic + VC++ DLL = ошибка Bad DLL calling convertation

04.02.2011, 09:28. Показов 5272. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Попытался я написать DLL-ку на VC++, для последующего использования ее в VB. Но поскольку я в VC++ чайник - он мне выдает ошибку Bad DLL calling convertation
Пример простого DLL на VC++
C++
1
2
3
4
5
#define EXPORT extern 'C' __declspec (dllexport)
EXPORT long StartA (char *FileAddress)
{
return 10;
}
В VB, я ее объявляю следующим образом:
Visual Basic
1
Private Declare Function StartA Lib 'C:programsVCPTestCBL.dll' (ByVal FileAddress As String) As Long
Помогите пожалуйста разобраться.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.02.2011, 09:28
Ответы с готовыми решениями:

Ошибка при вызове AngleArc "Bad DLL calling convention"
Private Declare Function AngleArc Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dwRadius As Long, ByVal...

Создание dll на основе Visual Basic
Помогите решить рабочую задачу: создание dll на основе visual basic. Требуется трехмерная модель с указанием переменных размеров. Размеры...

Работа с DLL в Visual Basic (статья)
В данной статье описаны основные способы работы с DLL в языке программирования Visual Basic. Рассчитана прежде всего на начинающих...

32
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,932
Записей в блоге: 5
04.02.2011, 21:42
Студворк — интернет-сервис помощи студентам
А вот я сейчас попробую. Мне надо убедиться, поскольку я всегда это пишу.
0
3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149
04.02.2011, 21:44  [ТС]
Спасибо всем кто мне помогал. Впринципе работает. Но работает только тогда, когда я откомпилирую приложение на VB. А при запуске в проекте - ошибка.
Да, и еще. Когда я в VC++ присваиваю параметру FileName какое либо значение
FileName='abc';
return 10;
Число 10 функция мне возвращает, но значение переменной FileName не меняет.

С уважением Akula
0
Messir
04.02.2011, 21:44
хотя, можно и писать - с точки зрения этикета так будет правильнее...
3 / 3 / 0
Регистрация: 12.07.2010
Сообщений: 128
04.02.2011, 21:44
PASCAL, обязательно PASCAL, написано же было черным по белому!!!
Что то же самое __pascal, (см. windef.h -> #define PASCAL __pascal), однако PASCAL более универсальное объявление, т.к. в
зависимости от платформы он в дебрях VC может быть определен
по-другому. А именно так, как нужно в текущих условиях.
0
Messir
04.02.2011, 21:46
2 Maga:
Чур тебя, чур!
Никакого Pascal! Только STDCALL!
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,932
Записей в блоге: 5
04.02.2011, 22:16
Вы как хотите, но без __stdcall у меня не работает. Я использую VC++ 7.0 и VB 6.0. Вот мои работающие файлы:

dlltest.cpp
Code
1
2
3
4
5
#define EXPORT extern 'C' __declspec (dllexport)
EXPORT  long __stdcall GetPictureFromBMP (char *FileAddress)
{
return 10;
}
dlltest.def
Code
1
2
3
LIBRARY DLLTest
EXPORTS
GetPictureFromBMP
Form1 (Code)
Code
1
2
3
4
5
6
7
8
9
Private Declare Function GetPictureFromBMP _
Lib 'D:CVCpatternDLLTestDebugDLLTest.dll' _
(ByVal ab As String) As Long
 
Private Sub Form_Load()
Dim s As String
s = 'asd'
MsgBox GetPictureFromBMP(s)
End Sub
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,932
Записей в блоге: 5
04.02.2011, 22:22
Бесполезно присваивать параметру FileAddress (вы почему-то назвали его FileName) значение, поскольку си считает, что он передан по значению. Вы можете изменить строку если сделаете напр. присваивание
FileAddres[0]='*';
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,932
Записей в блоге: 5
04.02.2011, 22:30
2 Maga
А какой у вас компилятор? PASCAL у меня не компилируется. То же со словами pascal, _pascal, __pascal.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,932
Записей в блоге: 5
04.02.2011, 22:36
2 Akula-II
У меня работает изменение строки:
Code
1
2
3
4
5
6
#define EXPORT extern 'C' __declspec (dllexport)
EXPORT long __stdcall GetPictureFromBMP (char *FileAddress)
{
    FileAddress[0]='*'
    return 10;
}
Code
1
2
3
4
5
6
7
8
9
10
Private Declare Function GetPictureFromBMP _
Lib 'D:CVCpatternDLLTestDebugDLLTest.dll' _
(ByVal ab As String) As Long
 
Private Sub Form_Load()
Dim s As String
s = 'asd'
MsgBox GetPictureFromBMP(s)
MsgBox (s)
End Sub
Работает также откомпилированный exe файл.
0
Messir
04.02.2011, 22:37
2 palva:
great sorry, я совсем забыл, что выставлял вызовы stdcall по умолчанию в настройках компилятора...
Messir
04.02.2011, 22:39
а вот extern 'C' там точно лишнее...
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,932
Записей в блоге: 5
04.02.2011, 22:41
Этт точно. Если применяется def-файл, то имя всё равно не декорируется.
0
3 / 3 / 0
Регистрация: 12.07.2010
Сообщений: 128
05.02.2011, 02:09
2 Messir:
1) PASCAL, как и _pascal, __pascal, STDCALL, в конечном итоге сводится к __stdcall, так что хочешь PASCAL, хочешь STDCALL, но что-то одно из
них должно быть!
Под Win32 на x86 любой из этих вариантов должен работать.

2) а говорил __stdcall писать не нужно

2 palva:
Все в комплекте: VB6, VC6... Вобщем VS6
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.02.2011, 02:09

Создание процедурных DLL в Visual Basic (статья)
Создание процедурных DLL в Visual Basic Несколько слов о резонах создания процедурных Dll на VB. Как известно, VB позволяет без...

Можно ли в Visual Basic использовать стандартные Windows DLL?
Добрый день! Подскажите пожалуйста, можно ли в Visual Basic использовать стандартные Windows DLL? Если можно, подскажите где взять...

Visual Basic 6 DLL для работы с php файлами
Есть ли такой? Если есть, дайте пож-та!

Visual Basic вылетает с ошибкой при попытке вызова функции из DLL
Declare Function testdll Lib "cfg.dll" () As String Private Sub Form_Load() Me.Caption = testdll() End Sub сама dll...

Ошибка Can't find DLL entry point CryptEnumProvidersA in advapi32.dll
Проблема вот в чем. Объявляем CryptEnumProviderTypesA Private Declare Function CryptEnumProviders Lib 'advapi32.dll' Alias...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru