Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];

Вниз

вопрос по 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
1-48023
SPeller
2002-08-03 08:29
2002.08.15
Вопрос о константах


3-47940
Дмитрий Жуков
2002-07-23 11:59
2002.08.15
Почему может виснуть многопоточный сервер приложений?


1-48016
Brand
2002-07-31 00:53
2002.08.15
RichEdit + Memo


1-48192
RangerBetta
2002-08-02 18:57
2002.08.15
Вызов процедуры


1-48124
HIDDEN
2002-07-31 17:36
2002.08.15
EVAL etc





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский