Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-52581
ASV
2001-12-29 00:14
2002.01.17
PDF Russian fonts


3-52480
grab
2001-12-14 20:05
2002.01.17
как закачать в stringgrid данные из Excel


1-52590
Д_Россиев
2001-12-29 13:25
2002.01.17
RX для D6


1-52558
AlexNekh
2001-12-27 08:48
2002.01.17
RichEdit


3-52459
dorosh
2001-12-14 06:55
2002.01.17
Как в DbGrid перерисовать ячейку





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский