//оригинал VBA
//Declare Function DrvGetCapStatus Lib "drv.dll" _
//(ByVal hWnd As Long, ByRefCaptured As Long) As Integer
function DrvGetCapStatus(hWnd: Int64; Captured: Int64 (как правильно оформить указатель? ): integer; stdcall; external 'drv.dll';
Портирование на Pascal с VB
Возникло затруднение в понимании как работает в этом VB ByRef и ByVal. Перевожу на Delphi один проект, в нем используется dll-ка, из которой вызываются функции, например:
Код:
Код:
function DrvGetCapStatus(hWnd: Int64; var Captured: Int64): integer; stdcall; external 'drv.dll';
т.е. разницы нет по сути между ByVal и ByRef?
Еще как есть. [SIZE=1][COLOR=Silver]Кстати, George ошибся. Должно быть наоборот:[/COLOR][/SIZE] ByVal - это ссылка по значению, т.е. значение параметра равно значению фактического параметра и является его копией (в Delphi описывается как простой параметр), ByRef - ссылочное значение, т.е. фактически указатель на переменную, содержащую фактическое значение параметра. Если значение по ссылке будет изменено внутри функции, то оно будет изменено и в переменной внешнего контекста (в Delphi описывается с ключевым словом var или const).
Код:
function DrvGetCapStatus(hWnd: Int64; var Captured: Int64): integer; stdcall; external 'drv.dll';
Цитата: makbeth
(в Delphi описывается с ключевым словом var или const).
Или out. Проще говоря, эти эти определения одинаковы:
Код:
procedure Proc(const AVar: String);
procedure Proc(var AVar: String);
procedure Proc(out AVar: String);
procedure Proc(AVar: PString);
procedure Proc(var AVar: String);
procedure Proc(out AVar: String);
procedure Proc(AVar: PString);
Более того, у них одинаковые параметры в том смысле, что Delphi генерирует одинаковый код для "var"/... - этот тот же указатель. Единственная разница в том, что программисту так обычно удобнее писать код процедуры - не надо везде дописывать "AVar^", меньше вариантов для ошибки.
Кстати, многие портированные импорты WinAPI пользуются этим, и заменяют Pointer'ы на "var".
Proger_XP, снова спасибо ) Проще объяснения не придумать.
Только откуда выкопалось Int64 заместо Long - не понятно.
Цитата: Phodopus
Только откуда выкопалось Int64 заместо Long - не понятно.
Видимо, отсюда: http://msdn.microsoft.com/en-us/library/y595sc15%28VS.80%29.aspx
Что-то неправильно?
вот.
А мне просто кажется здесь не VB.NET и соответственно