Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Вниз

вызов из dll процедуры, выдающей массив   Найти похожие ветки 

 
Grief ©   (2005-06-21 17:44) [0]


 Res = array of array of record
   Name: string;
   Proc: procedure;
 end;

Вот это описание имеется как в библиотеке dll так и в главной проге exe.

Вот это только в главной проге:

procedure TForm1.Button1Click(Sender: TObject);
var
 J: Res;
 Lib: HWnd;
 Proc: function: Res;
begin
 Lib := LoadLibrary("Operators.dll");
 Proc := GetProcAddress(Lib, "GetOperators");
 J := Proc;
 FreeLibrary(Lib);
end;

Вот это находится в библиотеке:

procedure PR;
begin
 MessageBox(0,0,0,0);
end;

function GetOperators: Res;
begin
 SetLength(Result, 1, 1);
 Result[0,0].Name := "fuck!";
 Result[0,0].Proc := PR;
end;


Почему ошибка?! Как я понял, все работает нормально, а ошибка выдается в тот момент, когда переменная J уничтожается - перед выходом, если переменная глобальная и в конце процедуры Button1Click если она, как и выше, локаьная.

Мастера, помогите, где у меня в ДНК ошибка? :)


 
Игорь Шевченко ©   (2005-06-21 17:47) [1]

uses Sharemem


 
Digitman ©   (2005-06-21 17:51) [2]


> где у меня в ДНК ошибка


именно в том звене, которое ответственно за чтение документации, находящейся прямо перед носом, и в чтении ОГРОМНОГО комментария, который делфи вставляет в текст dpr-файла будущей библиотеки, заготовка которой создается при File-New-Library


 
Grief ©   (2005-06-21 18:03) [3]

блин, а что такое Sharemem, я читал, я всегда перед удаленеем комментариев (смейтесь, но мне так легче - без них) их читаю. Так для чего же оно нужно?


 
Grief ©   (2005-06-21 18:07) [4]

Точнее, как оно работает. Я думал - фигня. Я вроде строки раньше просто преедавал. без всяких.


 
Игорь Шевченко ©   (2005-06-21 18:29) [5]


> Я думал - фигня


Правильно думал. Все фигня, кроме пчел. Забей.


 
Grief ©   (2005-06-21 19:18) [6]

Хе хе, а честно, для чего?


 
alpet ©   (2005-06-21 19:28) [7]

Этот модуль позволяет и приложению и библиотеке(dll) использовать один и тот же менеджер кучи (динамической памяти), поэтому в программах с его участием не возникает разногласий по поводу удаления некоторой строки созданой в dll при попытке удаления ее в главном модуле (exe). Использование данного юнита обязывает программу подключать при запуске библиотеку borlndmm.dll. Если не хочется таскать ее со своим приложением, лучше обратить внимание на  альтернативы, например FastShareMem.


 
alpet ©   (2005-06-21 19:31) [8]

Если все кажется слишком сложным, попробуй заменить string на что-нибудь типа type TStr = array [0..63] of char, и избегай использования в DLL строк и переменных, память под которые выделяется автоматически (и также автоматически освобождается).


 
Grief ©   (2005-06-21 21:59) [9]

А вообще, что является аналогом сишных строк? Я вот знаю винда под си писалась, посему наверное стандартные строки си являются стандартом в виндовс?


 
Digitman ©   (2005-06-22 08:19) [10]


> что является аналогом сишных строк?


если имеется ввиду

char * MyStringData

то

MyStringData: PChar


 
Grief ©   (2005-06-22 20:52) [11]

То есть PCHar все таки стандарт? А для длинных строк? Ведь насколько япомню PChar - только короткие? Или нет?


 
Fay ©   (2005-06-22 21:13) [12]

Grief ©   (22.06.05 20:52) [11]
PChar - указатель. Какие "длинные", какие "короткие"?!


 
Grief ©   (2005-06-22 22:08) [13]

он помоему указывает на короткие строки. На длинные разве не PAnsiChar?



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.013 c
4-1119418092
Progh
2005-06-22 09:28
2005.08.14
Как перевести вывести компьютер в спящий из спящего режим(а)


1-1122270265
Рафик
2005-07-25 09:44
2005.08.14
Debugger Fault Notification


9-1114330404
-=xXx=-
2005-04-24 12:13
2005.08.14
GLScene


3-1120833553
malamba
2005-07-08 18:39
2005.08.14
не видит параметр!


14-1121898253
Германн
2005-07-21 02:24
2005.08.14
Последний нонешний денёчек





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский