Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Bad DLL calling convention

425
13 мая 2005 года
sq_deep
498 / / 18.02.2005
Господа, помогите, пожалуйста, избавиться от Run-time error 49 (Bad DLL calling convention). Ситуация такая.

У меня есть MFC DLL, которую я сделал на MSVC++ v7. В ней функция
 
Код:
__declspec(dllexport) void mfcfun(int n) {...}
Я её вызываю из MS Access следующим кодом
 
Код:
Private Declare Sub mfcfun _
  Lib "C:\work\access\mfcdll.dll" _
  Alias "?mfcfun@@YAXH@Z" _
  (ByVal n As Integer)

Private Sub testDLL()
    mfcfun 33
End Sub
Она нормально вызывается, но выдаёт после выхода эту самую ошибку 49.

Конечно, можно поставить
On Error Resume Next
но только боюсь, это приведёт рано или поздно к каким-нибудь проблемам.

Что посоветуете?
425
16 мая 2005 года
sq_deep
498 / / 18.02.2005
Я всё понял. Программа вызывается из бейсика. Конечно, надо было писать [COLOR=blue]__stdcall[/COLOR] (или PASCAL):
 
Код:
__declspec(dllexport) void __stdcall mfcfun(int n) {...}
[COLOR=blue]А как можно закрыть тему, если к ней уже нечего добавить[/COLOR]:???:
7.1K
18 мая 2005 года
likhobory
87 / / 18.05.2005
Цитата:
[COLOR=blue]А как можно закрыть тему, если к ней уже нечего добавить[/COLOR]:???:

закрывает тему модератор, только какой смысл делать это в тематике, если кто-то захочет к ней вернуться;)

1.9K
21 декабря 2006 года
bad_duck
59 / / 29.07.2003
Пытаюсь использовать dll в программе на VB 6:
 
Код:
Public Declare Function dbConnect Lib "libpq.dll" Alias "PQconnectdb" (ByVal dbConnectInfo As String) As Long

Dim dbConnection As Long

dbConnection = dbConnect("некая строка")

и получаю эту ошибку.
Подскажите, что я неправильно делаю?

"Public" в объявлении потому, что функцию использую в другом модуле.
23K
21 декабря 2006 года
Naghual
12 / / 20.12.2006
Нельза описывать декларации как Паблик.
1.9K
21 декабря 2006 года
bad_duck
59 / / 29.07.2003
Цитата: Naghual
Нельза описывать декларации как Паблик.



1. Почему?
2. Как получать доступ к функциям из других модулей/форм?

ЗЫ. Замена Public на Private и перенос в используемый модуль эффекта не дало.

Да, кстати, забыл указать. В .h файле данная функция объявлена следующим образом:

 
Код:
extern PGconn *PQconnectdb(const char *conninfo);
23K
21 декабря 2006 года
Naghual
12 / / 20.12.2006
Мдя... Намудрили вы батенька...

Declare Function PQconnectdb Lib "LIBPQ.DLL" (stConString As String) As Long
1.9K
21 декабря 2006 года
bad_duck
59 / / 29.07.2003
хех... Не работает.
23K
21 декабря 2006 года
Naghual
12 / / 20.12.2006
Что именно не работает?
Ошибку и код в студию.
1.9K
21 декабря 2006 года
bad_duck
59 / / 29.07.2003
Создал новый проект для теста - форма и кнопка. В форме:
Код:
Option Explicit

Private Declare Function PQconnectdb Lib "LIBPQ.DLL" (stConString As String) As Long

Private Sub Command1_Click()
Dim Res As Long
Dim ConnStr As String

ConnStr = "hostaddr=127.0.0.1"
Res = PQconnectdb(ConnStr)
End Sub


Private поставил, потому, что VB ругаться стал.
Ошибка та же -
Run-time error '49':
Bad DLL calling convention

ЗЫ. А какая разница как я функцию обзову?
В MSDN, кстати, написано, что передача строковых параметров в функции, требующие указатели на строки оканчивающиеся нулем, должна происходить по ByVal. Но это не помогает. Та же ошибка.
23K
22 декабря 2006 года
Naghual
12 / / 20.12.2006
Интересно... У меня этот код вообще не выполняется...
Пишет "Файл не найден". Это он ДЛЛ не может найти, хотя я путь указывал конкретный.

Вероятно, трабл в каких-то необходимых этой ДЛЛке файлах.
1.9K
22 декабря 2006 года
bad_duck
59 / / 29.07.2003
Цитата: Naghual

Пишет "Файл не найден". Это он ДЛЛ не может найти, хотя я путь указывал конкретный.



А у тебя вообще эта dll есть? Она из поставки PostgreSQL 8.2, служит для работы с этой базой в своих программах.

23K
22 декабря 2006 года
Naghual
12 / / 20.12.2006
Цитата: bad_duck
А у тебя вообще эта dll есть? Она из поставки PostgreSQL 8.2, служит для работы с этой базой в своих программах.



Обижаете батенька...

1.9K
22 декабря 2006 года
bad_duck
59 / / 29.07.2003
Ну, тогда извиняюсь.
У меня путь к бинарникам базы в PATH прописан (исталлятор сам не прописывает, все ручками делал).
Сама библиотека написана на C. Когда использовал ее функции в C, проблем не было. Прога сразу подключалась к базе. Может быть она (dll-ка) скомпилирована как-то по особому, что ничего не выходит?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог