Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов функции из dll 
:(
    Опции темы
Leonid1611
Дата 2.12.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 2.4.2008

Репутация: нет
Всего: 1



Здравствуйте возникла проблема с передачей структуры из dll в функцию Delphi.
stdafx.h
Код

#include <windows.h>
#define PARAMETERS_COUNT 3

typedef struct ScriptPar
{
    char *name;
    char *description;
    int value;
};
typedef struct ParamArray
{
    struct ScriptPar mas[PARAMETERS_COUNT]; 
};

Testdll.c
Код

// TestDll.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"


#ifdef _MANAGED
#pragma managed(push, off)
#endif

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    return TRUE;

extern  __declspec (dllexport) struct ScriptPar _stdcall getStructure()
{
    static struct ScriptPar parameter;
    parameter.name = "par1";
    parameter.description = "Parameter 1";
    parameter.value = 1;
    return  parameter;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif


В Delphi:

Код

unit Unit1;

interface

uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls;

type
   TPointF = record                //тип "координаты точки"
      x, y : single;               //координаты
   end;
   TRectf = record                 //тип "координаты квадрата"
      a, b : TPointF;              //координаты
   end;
   Tparamerets = record
      name        : pchar;
      description : pchar;
      val         : single;
   end;
   {Tparam = record
      mas      : array[0..8] of Tparamerets;
      _rect    : TRectf;
      _rectdef : TRectf;
      nameobj  : pchar;
   end;}
   Tparam = record
      mas : ^Tparamerets;
   end;
   TForm1 = class(TForm)
      ScrollBox1 : TScrollBox;
      GroupBox1  : TGroupBox;
      GroupBox2  : TGroupBox;
      GroupBox3  : TGroupBox;
      Button1    : TButton;
      Button2    : TButton;
      ListBox1   : TListBox;
      ListBox2   : TListBox;
      procedure Button1Click(Sender: TObject);
   private
   public
   end;

   function getParameters : Tparam;      export; stdcall; external 'TestDll.dll' name 'getParameters';
   function getStructure  : Tparamerets; export; stdcall; external 'TestDll.dll' name 'getStructure';

var
   Form1  : TForm1;
   _param : Tparam;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   i  : integer;
   _p : Tparamerets;
begin
   _param := getParameters;
   _p := getStructure;

   {with _p do
      ListBox1.Items.Add(format('Параметр %d, имя %s, подсказка %s, значение %f', [i, name, description, val]));}
      
   //ListBox1.Items.Add(format('Колво параметров %d', [Length(_param.mas) - 1]));
   for i := 0 to 1 do begin
      with _param.mas^[i] do
         ListBox1.Items.Add(format('Параметр %d, имя %s, подсказка %s, значение %f', [i, name, description, val]));
   end;
end;

end.



При вызове выдается ошибка - не существует такой функции.
PM MAIL   Вверх
Alexeis
Дата 2.12.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Leonid1611 @  2.12.2008,  16:10 Найти цитируемый пост)

При вызове выдается ошибка - не существует такой функции. 

  Возможно дело в декорации имен функций С++. Неплохо бы глянуть какие реально имена функций в Dll.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alix
Дата 2.12.2008, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


L45
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 4.5.2005
Где: Pskov/Spb

Репутация: 7
Всего: 23



Код библиотеки который Вы привели полный? А то там есть только getStructure, да и код DllMain не закончен - нет закрывающей скобки..


--------------------
Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой
High tech. Low live. (с) Gardner Dozois
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.