В общем есть такой глюк (или не глюк?) - пишем dll на Delphi, вызываем ее функцию из VB. Если в качестве параметра передавать константу, все Ок. Но если передать переменную, то вместо ее значения функция получает нечно вовсе не похожее. Самое интересное дальше. Если проводить математические операции и возвращать значения, то результат оказываеться верным. Однако, если внутри функции применять операции сравнения, то все, фонарь - параметр обрабатываеться некорректно. Вот конкретно пример dll на Delphi:
- Код: Выделить всё
library DelphiDLL;
uses
SysUtils,
Dialogs;
Function TestDelphiDLL (X: Integer): Integer; export; stdcall;
begin
ShowMessage ('X = ' + IntToStr(X));
TestDelphiDLL := X*10;
end;
exports
TestDelphiDLL;
begin
end.
Объявление в VB:
- Код: Выделить всё
Private Declare Function TestDelphiDLL Lib "DelphiDLL" (ByVal X As Integer) As Integer
Если вызываем так:
- Код: Выделить всё
intRes = TestDelphiDLL(10)
сообщение из dll показывает правильное значение параметра = 10.
Если так:
- Код: Выделить всё
Dim intX As Integer
intX = 10
intRes = TestDelphiDLL(intX)
сообщение из dll показывает значение параметра = -65526...
Вот такая загогулина. Какое может быть объяснение сему феномену? В какую сторону копать? В сторону VB или Delphi? Или в сторону моих кривых рук? Могу выложить еще скомпиленую dll и тест на VB. Правда все это килобайт 200 будет...[/code]