3 / 3 / 0
Регистрация: 02.01.2011
Сообщений: 149

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

04.02.2011, 09:28. Показов 5281. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru