Форум: "Базы";
Текущий архив: 2002.01.17;
Скачать: [xml.tar.bz2];
ВнизDLL & Delphi никак не поймут друг друга, или я их. Найти похожие ветки
← →
Dim (2001-12-14 09:26) [0]Здравствуйте знатоки. Есть проблема которую без Вашей помощи не смогу решить. В общем есть поле в котором хранится адрес человека
Адрес формируется так, на название области, города, улиц и т.д. отводится по 42 символа. Если название меньше, то дополняется пробелами. Чтобы показать оператору адреса людей необходимо выбирать из поля подстоки с позиций 1,43,85,127 и т.д. для этой цели создал DLL в которой описаны две функции (для тестов) SubStr и SubString:
Автор Мадорский Г.В.
Function SubStr(Value : PChar; var Start, Count : Cardinal) : PChar; cdecl;export;
var Cnt : Cardinal;
begin
Result := ib_util_malloc(256);
if (Start + Count) > StrLen(Value) then
Cnt := StrLen(Value) - Start
else
Cnt := Count;
StrMove(Result, Value + Start - 1, Count);
Result := TrimString(Result);
Result[Start + Cnt - 2] := #0;
end;
Код взят с сайта ib_demo.ru
function SubString(InString: PChar; var StartChar, CountChar: Integer): PChar;cdecl;export;
var LenString : Integer;
begin
LenString := StrLen(InString);
Result := InString + LenString;
if (StartChar > 0) and (CountChar >= StartChar) then begin
if LenString >= StartChar then Result := InString + StartChar - 1;
if LenString > CountChar then InString[CountChar] := #0;
end;
end;
Так вот собстенно и проблема. Код предоставленный Мадорским Г.В. работает, но начиная с позиции 43 отсекает несколько последних симвлов, а если строка заканчивается раньше (например на 84,126 и т.д.) то вылетает на ошибку:
A fatal exception occurred during the execution of a user defined function.Access violation. The code attempted to access a virtual address without privilege to do sо.
Второй код начиная с позиции 43 всегда возвращает пусто. На сервере прописано так:
DECLARE EXTERNAL FUNCTION SUBSTRING
CSTRING(4096), INTEGER, INTEGER
RETURNS CSTRING(4096)
ENTRY_POINT "SubString" MODULE_NAME "MyDLL"
DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING(256), INTEGER, INTEGER
RETURNS CSTRING(256)
ENTRY_POINT "SubStr" MODULE_NAME "MyDLL.dll"
Помогите разобраться в чем проблема.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.01.17;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.003 c