Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2008, 18:45   #1
ivanesky
Новичок
Джуниор
 
Регистрация: 08.03.2008
Сообщений: 2
По умолчанию Библиотеки Dll

Приветствую.
Подскажите как правильно подгружать библиотеки написанные в С++
и как корректно из функций написанных в них
вызывать процедуры программе.
И по случаю еще вопрос. как корректно перевести из VBA в Delphi код.
А то в ВБА прописан алгоритм
а вот на делфи его не могу перевести
ivanesky вне форума Ответить с цитированием
Старый 08.03.2008, 19:07   #2
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Цитата:
Сообщение от ivanesky Посмотреть сообщение
Приветствую.
Подскажите как правильно подгружать библиотеки написанные в С++
и как корректно из функций написанных в них
вызывать процедуры программе.
И по случаю еще вопрос. как корректно перевести из VBA в Delphi код.
А то в ВБА прописан алгоритм
а вот на делфи его не могу перевести
И где код бейсика?
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 08.03.2008, 20:43   #3
ivannikov
 
Регистрация: 24.11.2007
Сообщений: 9
По умолчанию

Option Explicit
'dll calls. Should be declared
Public Declare Function VBRegisterGDSTask Lib "GDS2350-1-001.dll" (ByVal lpCallAddress As Long, ByVal uPort As Long, ByVal uMask As Long, ByVal sPanel As String) As Long
Public Declare Function UnregisterGDSTask Lib "GDS2350-1-001" () As Long
Public Declare Function VBGDSReturnDataPacket Lib "GDS2350-1-001" _
(ByRef lpSP As Any) As Long
Public Declare Function DSPEscOut Lib "GDS2350-1-001" _
(ByVal Esc As Long) As Long
'Constants
Public Const ESC_SG_CONTINUE = 5
Public Const ESC_SG_RESET = 6
Public Const DAC_CHANNELS = 4
Public Const DACQ_CHANNELS = 3
Public Const DAQ_POINTERS = 64
Public Const GDS_PKT_STATUS = 1
Public Const GDS_PKT_SCH = 2
Public Const GDS_PKT_SAV = 4
Public Const ESC_POWER_OFF = 23
Public Const ESC_POWER_ON = 22
'SP structure DO NOT EDIT ANY THING IN THIS STRUCTUTE
Public Type STATUS_PACKET
fDSPClock As Single
fFreqFactor As Single
bTestOn As Long
bControllerActive As Long
uPersonality As Long
uUIMode As Long
uCurrentMode As Long
ulCycleCount As Long
ulBlockCount As Long
uQCResidue As Long
bShutDown As Long
bTCIIdle As Long
bTCIStopped As Long
bTCIBusy As Long
bTCIDebug As Long
bTCILooping As Long
uSGByte As Long
bSGIdle As Long
bSGEmpty As Long
bSGHold As Long
uSGToGo As Long
uSGTimeToGo As Long
bHydraulicsTripped As Long
bLimitExceeded As Long
bLowPressure As Long
bApplicationBusy As Long
dwIMTCStatus As Long

uSCHLines As Long
uSAVLines As Long
uPKVLines As Long
uLOGLines As Long
uSCOLines As Long

bSCOOn As Long
bPKVOn As Long
bSCHOn As Long
bSAVOn As Long

bStartSCORecord As Long
bStartSCHRecord As Long
bStartSAVRecord As Long
bStartPKVRecord As Long
bStartLOGRecord As Long

bStopSCORecord As Long
bStopSCHRecord As Long
bStopSAVRecord As Long
bStopPKVRecord As Long
bStopLOGRecord As Long

bRecordSCHFullCycle As Long
bRecordLOGFullCycle As Long

fSetPoint As Single

fFeedback(DACQ_CHANNELS - 1) As Single
fMaxFeedback(DACQ_CHANNELS - 1) As Single
fMinFeedback(DACQ_CHANNELS - 1) As Single
fAvMax(DAC_CHANNELS - 1) As Single
fAvMin(DAC_CHANNELS - 1) As Single


sDataPath As Long
sSettingsPath As Long


fRange(DACQ_CHANNELS - 1) As Single

sChID(5) As String * 16

uDAQBuffOffset As Long
uDAQBuffSize As Long
uDAQOffset As Long

uSCHRec As Long
uSCHPtr(DAQ_POINTERS - 1) As Long

uSAVRec As Long
uSAVPtr(DAQ_POINTERS - 1) As Long

uSCORec As Long
uSCOPtr(DAQ_POINTERS - 1) As Long

uPKVRec As Long
uPKVPtr(DAQ_POINTERS - 1) As Long
utss As Long
uLOGRec As Long
uLOGPtr(DAQ_POINTERS - 1) As Long

uFiller(3000) As Long

End Type

Public SP As STATUS_PACKET

Public Sub GDSCallback(ByVal uKey As Long, ByVal iPoints As Long)
Dim iRet As Long

Select Case uKey
Case GDS_PKT_STATUS
'This code will updade automatically for every update interval mentioned in system settings
iRet = VBGDSReturnDataPacket(SP)
'This call will update SP Structure

'Update feedbacks
frmGDSDemo.txtFB1.Text = Format(SP.fFeedback(0), "0.000")
frmGDSDemo.txtFB2.Text = Format(SP.fFeedback(1), "0.000")
frmGDSDemo.txtFB3.Text = Format(SP.fFeedback(2), "0.000")

'Update Channel name
frmGDSDemo.lblCh1.Caption = SP.sChID(0)
frmGDSDemo.lblCh2.Caption = SP.sChID(1)
frmGDSDemo.lblCh3.Caption = SP.sChID(2)

'Update Channel unit
frmGDSDemo.lblUnit1.Caption = SP.sChID(3)
frmGDSDemo.lblUnit2.Caption = SP.sChID(4)
frmGDSDemo.lblUnit3.Caption = SP.sChID(5)

frmGDSDemo.lblSetPtUnit.Caption = SP.sChID(SP.uCurrentMode + 3)
frmGDSDemo.lblCycleUnit.Caption = SP.sChID(SP.uCurrentMode + 3)

Case GDS_PKT_SCH

Case GDS_PKT_SAV

Case GDS_PKT_PKV

Case GDS_PKT_SCO

Case GDS_PKT_LOG

End Select
End Sub
Это в модуле прописано
ivannikov вне форума Ответить с цитированием
Старый 08.03.2008, 20:45   #4
ivannikov
 
Регистрация: 24.11.2007
Сообщений: 9
По умолчанию

Option Explicit
Private iRet As Long

Private Sub cmdConnectToMachine_Click()
Dim uSiteID As Long
Dim uGDSMask As Long

uGDSMask = GDS_PKT_STATUS + GDS_PKT_SCH + GDS_PKT_SAV
'Status packet, Strip chart and Super average will update

ChDir ("\Program Files\MTL-Windows")
uSiteID = Val(txtSiteID.Text)

'To register to GDS
iRet = VBRegisterGDSTask(AddressOf GDSCallback, uSiteID, uGDSMask, "MS-Office-XL")



'Enable/disable buttons depending on registered/unregistered
If (iRet = 0) Then
lblStatus.Caption = "Machine On Line"
cmdGoOffLine.Enabled = True
cmdConnectToMachine.Enabled = False


cmdStop.Enabled = True
cmdPowerOff.Enabled = True
Else
lblStatus.Caption = "Machine Off Line"
End If

End Sub



Private Sub cmdGoOffLine_Click()
'To unregister form GDS
iRet = UnregisterGDSTask


'Enable/disable buttons depending on registered/unregistered
If (iRet = 0) Then
lblStatus.Caption = "Machine Off Line"
cmdGoOffLine.Enabled = False
cmdConnectToMachine.Enabled = True


cmdStop.Enabled = False
cmdPowerOff.Enabled = False
Else
lblStatus.Caption = "Machine On Line"
End If
End Sub
Private Sub cmdPowerOff_Click()
'To switch off the power
iRet = DSPEscOut(ESC_POWER_OFF)
'ESC_POWER_OFF is a constant
lblStatus.Caption = "Power Off"
End Sub
Private Sub cmdStop_Click()
'To reset segments
iRet = DSPEscOut(ESC_SG_RESET)
'ESC_SG_RESET is a constant
lblStatus.Caption = "User Stopped"
End Sub
а это уже в самом теле формы для кнопок и тп

Программа общаеться с виртуальной машиной и забирает.передает ей значения.
ivannikov вне форума Ответить с цитированием
Старый 09.03.2008, 00:00   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Ну переводить думаю просто так врятли кто станет. Скажу одно почитайте первым делом про dll, обработчики с вызовом stdcall, а так же про типы в VB(A) что и сколько байт занимает ну и соответственно в object pascal. Да и все собственно
BOBAH13 вне форума Ответить с цитированием
Старый 09.03.2008, 00:06   #6
ivannikov
 
Регистрация: 24.11.2007
Сообщений: 9
По умолчанию

Я вообщет по другому немного вопрос ставил изначально.
как правильно указать библиотеку описанную в С
потому как написанно много
но толком не понятно.
где изменяються имена функций
где нет
где в место StdCall родную для С Директиву cdecl применять.
ivannikov вне форума Ответить с цитированием
Старый 09.03.2008, 04:51   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от ivanesky / ivannikov Посмотреть сообщение
Приветствую.
Подскажите как правильно подгружать библиотеки написанные в С++
и как корректно из функций написанных в них
вызывать процедуры программе.
...................
как правильно указать библиотеку описанную в С
потому как написанно много
но толком не понятно.
где изменяються имена функций
где нет
где в место StdCall родную для С Директиву cdecl применять.
Раз десять эту телеграмму прочитал.. и ни черта не понял... Что, откуда и куда вот здесь " и как корректно из функций написанных в них вызывать процедуры программе" вызывать??? Что значит корректно?? О чём вот это: "где изменяються имена функций где нет" ??? На чем всё-таки написана библиотека, на C, или на C++??? Что означает "правильно указать библиотеку описанную в С"??? Единственное, что кое-как осилил, так это
Цитата:
"где в место StdCall родную для С Директиву cdecl применять."
А это ещё зачем???
P.S. Чем точнее вопрос, тем точнее будет ответ.
B_N вне форума Ответить с цитированием
Старый 10.03.2008, 10:08   #8
ivannikov
 
Регистрация: 24.11.2007
Сообщений: 9
По умолчанию

Прошу извинений сам написал и сам не понял)))
библиотека написана на С++
вопрос в том как такую библиотеку подгружать в программу
так же как написанную в делфи
или же есть свои особенности
Вопрос:
как правильно подгрузить библиотеку написанную в С++?
ivannikov вне форума Ответить с цитированием
Старый 10.03.2008, 10:26   #9
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

библиотека на с++ подгружается к делфе как родная его дллка. только типы данных должны быть соблюдены.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 10.03.2008, 10:42   #10
ivannikov
 
Регистрация: 24.11.2007
Сообщений: 9
По умолчанию

значит при вызове функции обратить внимание на соответствие указанных типов.
а принцип вызова то же.
спасибо.
ivannikov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
библиотеки ShenDy Общие вопросы C/C++ 5 25.07.2008 21:45
Библиотеки в С++ MIKI Свободное общение 5 10.06.2008 20:15
DLL библиотеки Altera Помощь студентам 2 06.02.2008 06:13
Мат библиотеки для С# TheGuardian123 Общие вопросы .NET 0 31.01.2008 18:10