Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2012, 00:46   #1
Jimmy_st
Новичок
Джуниор
 
Регистрация: 10.04.2012
Сообщений: 1
По умолчанию Импорт вложенных структур в dll

Есть следующая проблема:
в проекте, написанном на Delphi объявлена вложенная запись:
Код:
rRec=record
  NumberInRec: integer;
end;
rTestRecord=record
  Number: integer;
  Rec: rRec;
end;
Эта запись импортируется в dll, написанную на C:
Код:
//******
//.h файл
//******
struct rRec
{
  int NumberInRec;
};
struct rTestRecord
{
  int Number;
  struct rRec Rec;
};
extern "C" __declspec(dllexport) int FTest( struct rTestRecord *TestRecord);

//******
//.cpp файл
//******
extern "C" __declspec(dllexport) int FTest( struct rTestRecord *TestRecord)
{
  int NewNumber=5;
  int NewNumberInRec=10;
  TestRecord->Number=NewNumber;
  TestRecord->Rec.NumberInRec=NewNumberInRec;
  return 0;
};
которая вызывается в программе Delphi. Однако меняется только значение Number, а подзапись Rec оcтается без изменения. Более того, если вместо переопределения вывести значение Rec.NumberInRec, то там оказывается совсем другое значение, нежели установленное в Delphi.
Вопрос:
Почему так происходит и как мне импортировать данные вложенных записей во вложенные структуры dll? Заранее спасибо.
Jimmy_st вне форума Ответить с цитированием
Старый 10.04.2012, 04:04   #2
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Вы не показали, как декларирована функция в делфи, поэтому можно только догадываться.
По уму делается так.
В длл:
Код:
struct rRec
{
	int NumberInRec;
};
struct rTestRecord
{
	int Number;
	rRec Rec;
};
int _stdcall FTest(rTestRecord *TestRecord);
и компилится вместе с def-файлом:
Код:
LIBRARY	mydll
EXPORTS
FTest
И хоть из VBA вызывай, будет работать.

В экзешнике делфи:
(правда я на нем не пишу, старшие товарищи может поправят, что не так)
Код:
type  rRec = Record
  NumberInRec : Integer
end;

type  rTestRecord = Record
  Number : Integer;
  Rec: rRec;
end;

function   FTest(x: Pointer) :  Integer stdcall; external '\PATH\mydll.dll';

//.....

var
  FF: rTestRecord;
begin

 FTest(@FF);

end;
Как то так.

Последний раз редактировалось EUGY; 10.04.2012 в 04:29.
EUGY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DLL на Delphi импорт в C++ RuVarez Общие вопросы Delphi 5 26.09.2011 12:46
Импорт типа из DLL kettanaito Общие вопросы Delphi 3 22.09.2011 20:03
доступ к элементам вложенных структур tormozina Общие вопросы C/C++ 2 17.03.2011 21:39
Импорт из С dll на Дельфи apromix Помощь студентам 19 17.11.2009 21:07
Импорт VB6 DLL в C++ DmF Общие вопросы C/C++ 1 06.03.2008 08:48