Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перевести код из VBA в Pascal [D7, XP]


Страницы:   1 2

_Mik ©   (2012-08-10 14:31:00) 

Народ, помогите плиз, не выходит перевести код из VBA в Паскаль:

VBA

Declare Function ODMRegisterApp Lib "odma32.dll" (ODMHandle As Any, ByVal Version As Integer, ByVal AppID As String, ByVal EnvData As Long, Reserved As Any) As Integer
Declare Function ODMOpenDoc Lib "odma32.dll" (ByVal ODMHandle As Any, ByVal flags As Long, ByVal Docid As String, ByVal DocLocation As String) As Integer

...
Dim buffer As String * 255         ' Fixed buffer for passing strings to C-type routines
Dim Docid As String
Dim DocLocation As String          ' regular VB variant string
Dim DocTitle As String
Dim rc As Integer          ' result code
Dim SearchNames As Name

   Call MsgBox("DDEOpen (" + ODMADocID$ + "," + Str(flags))
   On Error GoTo EndOpenDocument

   rc = 0

   ODMHandle = ODMA.RegisterAppWithODMA
 
   buffer = Space(Len(buffer))
   Docid = ODMADocID$
   
   ' User selected a document, so open it through ODMA
   rc = ODMA.ODMOpenDoc(ODMHandle, flags, Docid, ByVal buffer)
...

Pascal

interface
   function ODMRegisterApp (var ODMHandle: variant ;Version : Integer; AppID : String;var  EnvData : LongWord; Reserved: variant): Integer; stdcall; external 'odma32.dll';
   function ODMOpenDoc     (var ODMHandle: variant ;var flags   : Integer; Docid : String; var  DocLocation : shortstring): Integer; stdcall; external 'odma32.dll';

   Procedure test();

   //====================================================
   //
   const ExcelAppID = 'MS EXCEL';
   const ODM_API_VERSION = 100  ;                        // версия API_DM

   // флаги доступа
   const ODM_VIEWMODE=2;                                 // только для чтения

implementation

uses
 Classes, SysUtils, windows;

Procedure test();
var
   result        : integer ;
   ODMHandle     : variant ;
   Handle        : HWND    ;
   DocFilePath   : shortstring  ;
   Docid         : string  ;
   viewMode      : integer ;

begin
   Docid :='::ODMA\PCDOCS\VLGDMLIB\156276\1';
   viewMode:=ODM_VIEWMODE;

   Handle:= GetForegroundWindow ;
   result:= ODMRegisterApp (ODMHandle, ODM_API_VERSION,  ExcelAppID, Handle, nil );
   result:= ODMOpenDoc     (ODMHandle, viewMode, Docid , DocFilePath );
end;

При запуске ODMOpenDoc  возникает исключение!


_Mik   (2012-08-13 14:09:00) [21]

Ничего не выходит, первая функция выполняется нормально в таком виде:

function ODMRegisterApp (var ODMHandle: variant ;Version : Integer; AppID : String;var  EnvData : LongWord; Reserved: variant): Integer; stdcall; external  'odma32.dll';
   


А вторая все так же выдает исключение, к сожалению исходники на VBA это все, что у меня есть...
OleVarriant вроде как не нужен...
Если можно по подробней про array[0..255] of Char, дельфи не занимался уже 5 лет, вспоминать трудно...


_Mik   (2012-08-11 17:03:00) [22]

Спасибо в понедельник попробую, вся фишка в том, что это не моя библиотека, и она является частью документа оборота работающего на работе...


turbouser   (2012-08-10 22:08:00) [23]


>  Dimka Maslov ©   (10.08.12 21:11) [3]

+1


turbouser   (2012-08-10 22:04:00) [24]

function ODMRegisterApp (var ODMHandle: variant ;Version : Integer; AppID : PChar;var  EnvData : LongWord; Reserved: variant): Integer; stdcall; external 'odma32.dll';
  function ODMOpenDoc     (var ODMHandle: variant ;var flags   : Integer; Docid : PChar; var  DocLocation : PChar): Integer; stdcall; external 'odma32.dll';
Как-то так.


Dimka Maslov   (2012-08-10 21:11:00) [25]

String это исключительно делфийская сущность. Надо использовать array[0..255] of Char. Так же вместо variant нужен OleVariant. Также надо разобраться, где var, a где не var. Хорошо бы ещё поискать родной сишный заголовочный файл.


_Mik   (2012-08-10 15:28:00) [26]

Проект dmConsole вызвал класс исключения 'external:SIGSEGV'
по адресу 10003092


Anatoly Podgoretsky   (2012-08-10 15:04:00) [27]

> _Mik  (10.08.2012 14:31:00)  [0]

Так и пишет - я исключение?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо