Bad DLL calling convention
У меня есть MFC DLL, которую я сделал на MSVC++ v7. В ней функция
Код:
__declspec(dllexport) void mfcfun(int n) {...}
Код:
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
Lib "C:\work\access\mfcdll.dll" _
Alias "?mfcfun@@YAXH@Z" _
(ByVal n As Integer)
Private Sub testDLL()
mfcfun 33
End Sub
Конечно, можно поставить
On Error Resume Next
но только боюсь, это приведёт рано или поздно к каким-нибудь проблемам.
Что посоветуете?
Код:
__declspec(dllexport) void __stdcall mfcfun(int n) {...}
Цитата:
[COLOR=blue]А как можно закрыть тему, если к ней уже нечего добавить[/COLOR]:???:
закрывает тему модератор, только какой смысл делать это в тематике, если кто-то захочет к ней вернуться;)
Код:
Public Declare Function dbConnect Lib "libpq.dll" Alias "PQconnectdb" (ByVal dbConnectInfo As String) As Long
Dim dbConnection As Long
dbConnection = dbConnect("некая строка")
Dim dbConnection As Long
dbConnection = dbConnect("некая строка")
и получаю эту ошибку.
Подскажите, что я неправильно делаю?
"Public" в объявлении потому, что функцию использую в другом модуле.
Нельза описывать декларации как Паблик.
Цитата: Naghual
Нельза описывать декларации как Паблик.
1. Почему?
2. Как получать доступ к функциям из других модулей/форм?
ЗЫ. Замена Public на Private и перенос в используемый модуль эффекта не дало.
Да, кстати, забыл указать. В .h файле данная функция объявлена следующим образом:
Код:
extern PGconn *PQconnectdb(const char *conninfo);
Declare Function PQconnectdb Lib "LIBPQ.DLL" (stConString As String) As Long
хех... Не работает.
Ошибку и код в студию.
Код:
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 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. Но это не помогает. Та же ошибка.
Пишет "Файл не найден". Это он ДЛЛ не может найти, хотя я путь указывал конкретный.
Вероятно, трабл в каких-то необходимых этой ДЛЛке файлах.
Цитата: Naghual
Пишет "Файл не найден". Это он ДЛЛ не может найти, хотя я путь указывал конкретный.
А у тебя вообще эта dll есть? Она из поставки PostgreSQL 8.2, служит для работы с этой базой в своих программах.
Цитата: bad_duck
А у тебя вообще эта dll есть? Она из поставки PostgreSQL 8.2, служит для работы с этой базой в своих программах.
Обижаете батенька...
У меня путь к бинарникам базы в PATH прописан (исталлятор сам не прописывает, все ручками делал).
Сама библиотека написана на C. Когда использовал ее функции в C, проблем не было. Прога сразу подключалась к базе. Может быть она (dll-ка) скомпилирована как-то по особому, что ничего не выходит?