Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.13;
Скачать: CL | DM;

Вниз

Получение указателя на масиив из dll на Delphi   Найти похожие ветки 

 
zux   (2002-04-27 21:47) [0]

Есть длл Написанная а Обжект Паскале
Вот пример экспортной фукнции

type Aint=array of Integer;
type PAint=^Aint;

function Test():PAint;stdcall;
var
asd:Aint;
begin
setLength(Aint,2);
asd[0]:=2;
asd[1]:=4;
Result:=@asd;
end;

теперь в С++
я делаю

typedef int *pint;
typedef pint (_stdcall *FTest)();
FTest Test;
HINSTANCE Main_dll;

Main_dll=LoadLibrary("Main.dll");
Test=FTest(GetProcAddress(Main_dll,"Test"));

pint p;
p=Test();//p-указатель на массив в длл приетом этот указетель
несодержит не каких данных а если и содержит то ето не данные а мусор

а вот если в длл поменять
type Aint=array of Integer; на
type Aint=array[0..2] of Integer;
ТОбиш как только меняем динамический масси на статический все нормально
Подскажите как заставить работать данный пример с динамическим массивом


 
Alx2   (2002-04-29 11:19) [1]

Динамические массивы - вещь специфичная Delphi. C++ не поймет. Делай статикой, либо "стандартными" типами данных, либо расковыривай у Delphi менеджер памяти и смотри как он с динамическими массивами работает. Либо используй свой тип данных со своей поддержкой.


 
Dimk   (2002-04-29 11:39) [2]

Ты возвращаешь из Test указатель на данные в стеке ( asd располагается в стеке! Даже если это динамический массив то в asd содержится указатель на ...). Это классический глюк.
Когда ты вернешься из процедуры - стек очистится asd с высокой вероятностью будет затерт. Сделай asd глобальным.



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

Текущий архив: 2002.05.13;
Скачать: CL | DM;

Наверх




Память: 0.44 MB
Время: 0.004 c
1-39751
Чайна
2002-04-26 23:53
2002.05.13
Сохранение рекорда с динамическим массивом в файле


4-39914
alya
2002-03-13 13:00
2002.05.13
Окно поверх остальных


1-39691
Johnmen
2002-04-29 12:40
2002.05.13
TEdit и звуковые эффекты


1-39791
Samvel
2002-04-29 10:34
2002.05.13
Помогите новичку


1-39737
cypher
2002-04-26 23:17
2002.05.13
Очень срочный вопрос!!





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