Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 49 (неверное соглашения о вызовах dll) Access97 
V
    Опции темы
zayac
Дата 12.3.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 12.3.2006

Репутация: нет
Всего: нет



Необходимо вставить в Access 97 dll, для работы с внешним устройством. Dll написана в Delphi, там одна функция и объявляется она так:
Код

function GetCard(Port: integer; var FCard: byte; var NCard: integer): boolean

Когда проверяешь dll через делфи то все работает.


Код в Access97:
Код

Option Explicit
 Private Declare Function GetCard Lib "cr12001.dll" (Port As Integer, FCard As Byte, NCard As Integer) As Boolean

Private Sub Кнопка0_Click()
 Dim id As Integer
 Dim fc As Byte
 Dim nc As Integer
 Dim op As Boolean
 id = 1
 op = GetCard(id, fc, nc)
  DoCmd.TransferDatabase acLink, "dBase IV", "C:\ZayaC\", acTable, "cr-obed.dbf", "CR_OBED", False
  id = DLookup("[ID]", "CR_OBED", "[FCard]=" & Str(fc) & " and [NCard]=" & Str(nc))
  MsgBox (Str(id))
  DoCmd.DeleteObject acTable, "CR_OBED"
End Sub


Выдает ошибку выполнения 49 "Неверные соглашения о вызовах dll"
Вопрос как заставить в Access(е) енто дело работать? Пробовал через ByVal некоторые значения передовать, все равно не хочет.
PM MAIL   Вверх
Akina
Дата 13.3.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Если я не ошибаюсь, в Дельфовом коде функция должна быть объявлена ка вызываемая с Сишным интерфейсом - cdecl или как оно там в Дельфах... именно на это тебе указывает сообщение об ошибке.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
zayac
Дата 13.3.2006, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 12.3.2006

Репутация: нет
Всего: нет



Все равно нехочет даже если в Делфи объявить функцию как cdecl.
Игра с ByVal и ByRef результата не дает.

*********************************************************
Все вопрос снят, проблема решилась следующим образом:
Код

function GetCard(Port: integer; var FCard: integer; var NCard: integer): integer; stdcall; export;


в Access(e)
Код

Private Declare Function GetCard Lib "cr12001.dll" (ByVal Port As Integer, ByRef FCard As Long, ByRef NCard As Long) As Long


Это сообщение отредактировал(а) zayac - 13.3.2006, 22:16
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.