|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.03.2008, 18:45 | #1 |
Новичок
Джуниор
Регистрация: 08.03.2008
Сообщений: 2
|
Библиотеки Dll
Приветствую.
Подскажите как правильно подгружать библиотеки написанные в С++ и как корректно из функций написанных в них вызывать процедуры программе. И по случаю еще вопрос. как корректно перевести из VBA в Delphi код. А то в ВБА прописан алгоритм а вот на делфи его не могу перевести |
08.03.2008, 19:07 | #2 | |
Участник клуба
Регистрация: 26.10.2007
Сообщений: 1,244
|
Цитата:
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым, Попытка глубже понимать уже попахивает литром... |
|
08.03.2008, 20:43 | #3 |
Регистрация: 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 Это в модуле прописано |
08.03.2008, 20:45 | #4 |
Регистрация: 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 а это уже в самом теле формы для кнопок и тп Программа общаеться с виртуальной машиной и забирает.передает ей значения. |
09.03.2008, 00:00 | #5 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Ну переводить думаю просто так врятли кто станет. Скажу одно почитайте первым делом про dll, обработчики с вызовом stdcall, а так же про типы в VB(A) что и сколько байт занимает ну и соответственно в object pascal. Да и все собственно
|
09.03.2008, 00:06 | #6 |
Регистрация: 24.11.2007
Сообщений: 9
|
Я вообщет по другому немного вопрос ставил изначально.
как правильно указать библиотеку описанную в С потому как написанно много но толком не понятно. где изменяються имена функций где нет где в место StdCall родную для С Директиву cdecl применять. |
09.03.2008, 04:51 | #7 | ||
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Цитата:
Цитата:
P.S. Чем точнее вопрос, тем точнее будет ответ. |
||
10.03.2008, 10:08 | #8 |
Регистрация: 24.11.2007
Сообщений: 9
|
Прошу извинений сам написал и сам не понял)))
библиотека написана на С++ вопрос в том как такую библиотеку подгружать в программу так же как написанную в делфи или же есть свои особенности Вопрос: как правильно подгрузить библиотеку написанную в С++? |
10.03.2008, 10:26 | #9 |
Участник клуба Подтвердите свой е-майл
Регистрация: 14.12.2007
Сообщений: 1,434
|
библиотека на с++ подгружается к делфе как родная его дллка. только типы данных должны быть соблюдены.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
|
10.03.2008, 10:42 | #10 |
Регистрация: 24.11.2007
Сообщений: 9
|
значит при вызове функции обратить внимание на соответствие указанных типов.
а принцип вызова то же. спасибо. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
библиотеки | 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 |