![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевести код из VBA в Pascal [D7, XP]
_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]
Так и пишет - я исключение?