Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.15;
Скачать: CL | DM;

Вниз

вопрос по dll   Найти похожие ветки 

 
ol   (2002-05-15 00:16) [0]

Привет
Не могли бы вы подсказать
есть dll-ка asycom.dll - драйвер для работы с электронными весами
вот кусок текста полученного с помощью программы tdump
Non-Resident Name Table offset: 0109h
Module Description: "ASYCOM.DLL"
Name: WRITE_SLAVE Entry: 6
Name: CLOSE_ASYCOM Entry: 4
Name: WATCHDOG_ASYCOM Entry: 5
Name: OPEN_SLAVE Entry: 8
Name: RETRY_ASYCOM Entry: 2
Name: OPEN_ASYCOM Entry: 3
Name: CLOSE_SLAVE Entry: 9
Name: READ_SLAVE Entry: 7

я так понимаю что это функции(или процедуры?)
Объявляю в проекте эту dll так

implementation
function OPEN_ASYCOM(port:integer;baud:integer;bits:integer;slaves:integer):integer;
stdcall;
external "asycom.dll";
{$R *.dfm}
компилирую, запускаю все нормально

пробую на кнопку повесить открытие open_asycom

procedure TForm1.Button1Click(Sender: TObject);
begin
open_asycom(1,2400,8,1);
end;

компилирую все нормально

при попытке запустить выдает ошибку что "по-видимому asycom.dll поврежден" и вторая "присоединенное к системе устройство не работает"
хотя я точно знаю что dll-ка рабочая т.к. прилагаемая тестовая программа работает

Подскажите мож я че не так делаю

Олег


 
BAHO ©   (2002-05-15 05:07) [1]

А может это не функции и процедуры
а сообщения...
или неправильно указал параметры...


 
ol   (2002-05-15 21:17) [2]

да нет это ф-ции или процедуры
там с этой dll есть скудненький пример на визуал бейсике
где видно что объявляется эти функции а потом используются
попытался аналогично наворотить на делфи, результат смотри выше
:-((


 
Krok   (2002-05-16 12:35) [3]

А не пробовал так:

Interface
function OPEN_ASYCOM(port:integer;baud:integer;bits:integer;slaves:integer):integer;

{$EXTERNALSYM OPEN_ASYCOM}

implementation
function OPEN_ASYCOM(port:integer;baud:integer;bits:integer;slaves:integer):integer;
external "asycom.dll" name "OPEN_ASYCOM";


 
ol   (2002-05-17 01:56) [4]

неа, и это не помогло


 
Andykor   (2002-05-17 13:00) [5]

А примерчик на VB покажи.


 
ol   (2002-05-17 16:24) [6]

Option Compare Database "Verwenden der Datenbank-Sortierreihenfolge beim Vergleich von Zeichenfolgen.


Private Declare Function OPEN_ASYCOM Lib "asycom.dll" (ByVal port As Integer, ByVal Baud As Integer, ByVal bits As Integer, ByVal SLAVES As Integer) As Integer
Private Declare Function CLOSE_ASYCOM Lib "asycom.dll" () As Integer
Private Declare Function OPEN_SLAVE Lib "asycom.dll" (ByVal Slave As Integer, ByVal Adr As Integer) As Integer
Private Declare Function CLOSE_SLAVE Lib "asycom.dll" (ByVal Slave As Integer) As Integer
Private Declare Function Write_Slave Lib "asycom.dll" (ByVal Slave As Integer, ByVal Length As Integer, ByVal writedata$) As Integer
Private Declare Function READ_SLAVE Lib "asycom.dll" (ByVal Slave As Integer, Length As Integer, ByVal readdata$) As Integer


Dim Com_Status As Integer
Dim Com_Timeout As Integer
Dim Com_TelgrTimeout As Integer

Dim Ab As Workspace
Dim Dn As Recordset
Dim Dbase As Database

Private Sub BTN_Send_Click()

Dim I As Integer


TXT_Send.SetFocus
If TXT_Send.Text <> "" Then
I = Write_Slave(1, Len(TXT_Send.Text), TXT_Send.Text)
TXT_Send.Text = ""
End If


End Sub

Private Sub BTN_WriteDbase_Click()

On Error Resume Next

Dn.AddNew
Dn![Rx] = Text14.Caption
Dn.Update

End Sub

Private Sub Form_Load()

Dim I As Integer

On Error Resume Next

Set Ab = DBEngine.Workspaces(0)
Set Dbase = Ab.OpenDatabase("C:\ACCESS.MDB")
Set Dn = Dbase.OpenRecordset("RX")

I = OPEN_ASYCOM(2, 4800, 7, 1)
I = OPEN_SLAVE(1, 65)


End Sub

Private Sub Form_Timer()

Dim Telgr As String * 256
Dim TelgrLen As Integer
Dim Rx As String
Dim Tx As String
Dim I As Integer
Dim J As Integer
Dim TimeOut As Integer
Dim Slave As Integer
Dim Buff As String

On Error Resume Next


"**********************************************************
"
"
" Den nдchsten Slave auswдhlen, Timeouts ьberprьfen und
" prьfen ob Slave ok ist und Telegramm vorliegt
"
"**********************************************************

" If Com_Enabled = True Then
TimeOut = Com_TelgrTimeout
If TimeOut > 0 And Com_Status = True Then
TimeOut = TimeOut - 1
If TimeOut = 1 Then " Timeout abgelaufen
TimeOut = 0 " Telegrammwiederholung vorberteiten
End If
Com_TelgrTimeout = TimeOut
End If


TelgrLen = 0
If READ_SLAVE(1, TelgrLen, Telgr) = -5 Then
If Com_Status = True Then
Com_Status = False
Text15.Caption = "Communication Off"
End If
Else
If Com_Status = False Then
Com_Status = True
Text15.Caption = "Communication On"
End If


"***********************************************************
" Empfangenes Telegramm interpretieren
"***********************************************************

If TelgrLen > 0 Then
Text14.Caption = Left$(Telgr, TelgrLen)
Com_TelgrTimeout = 0
End If
End If


" End If

End Sub

Private Sub Form_Unload(Cancel As Integer)

Dim I As Integer

On Error Resume Next

I = CLOSE_SLAVE(1)
I = CLOSE_ASYCOM()

Dn.Close
Dbase.Close

End Sub


 
kig   (2002-05-17 21:00) [7]

Раз у Вас пашет VB с этой dll, то скорее всего дело в модификаторе вызова

function OPEN_ASYCOM(port:integer;baud:integer;bits:integer;slaves:integer):integer;
cdecl;



 
Andykor   (2002-05-18 09:26) [8]

Или так
function OPEN_ASYCOM port:integer;baud:integer;bits:integer;slaves:integer):integer;
stdcall;

Попробуй. B еще, если получиться, не передавай значения типа string, используй PСhar.


 
Севостьянов Игорь ©   (2002-05-25 23:13) [9]

Не знаю - может я не прав, но по-моему в Delphi функции из DLL объявляются так:

function OPEN_ASYCOM(Port, Baud, Bits, Slaves: Integer): Integer;
stdcall; external "asycom.dll" name "OPEN_ASYCOM";


procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
i := open_asycom(1,2400,8,1);
end;


Попробуй так...
Можно конечно попробовать похимичить, но у меня нет ни DLL ни устройства (c VB примером)


 
ol   (2002-06-03 17:07) [10]

порылся тут и понял что скорей всего dll - 16 разрядная,
исходя из этого просто так ее не вызовеш :-((



Страницы: 1 вся ветка

Текущий архив: 2002.08.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
14-48266
MAN-IN-RED
2002-07-19 13:24
2002.08.15
Где в Киеве можно купить Xbox?


3-47996
grandad
2002-07-26 10:16
2002.08.15
Нужно поставить прогу, работающую с БД accesss (mdb) от MS Office


1-48114
anod
2002-08-05 12:13
2002.08.15
ListView


1-48144
Андрусь
2002-07-24 10:51
2002.08.15
Подскажите как просмотреть,что я создаю в куче.


14-48306
Evyshka
2002-07-22 17:04
2002.08.15
Evyshka Я не блондинка