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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 04.11.2010, 11:11   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию Exports в DLL

Вот, пишу такую DLL:
Код:
library InitSAME;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

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

{$R *.res}

Var
    EngineD3D: IDirect3D9;
    EngineDevice: IDirect3DDevice9;
    EngineIsActive:Boolean;
    EngineWindow:Boolean;
    Function InitEngine: HResult;
    Procedure FreeEngine;
    Function ClearDevice: HResult;
    Function Render: HResult;

Function InitEngine(Wind:TForm): HResult;stdcall;
Var
    DisplayInfo: TD3DDisplayMode;
    d3dParams: TD3DPresentParameters;
Begin
      Result:=E_FAIL;
      EngineD3D:=Direct3DCreate9(D3D_SDK_VERSION);
      If EngineD3D = nil Then Exit;
      Result:=EngineD3D.GetAdapterDisplayMode(D3DADAPTER_DEFAULT,DisplayInfo);
      If Failed(Result) Then Exit;
      ZeroMemory(@d3dParams,SizeOf(d3dParams));
      d3dParams.Windowed:=EngineWindow;
      d3dParams.SwapEffect:=D3DSWAPEFFECT_DISCARD;
      d3dParams.BackBufferFormat:=DisplayInfo.Format;
      if not EngineWindow then
      begin
            d3dParams.FullScreen_RefreshRateInHz:=DisplayInfo.RefreshRate;
            d3dParams.BackBufferWidth:=DisplayInfo.Width;
            d3dParams.BackBufferHeight:=DisplayInfo.Height;
            Wind.BorderStyle:=bsNone;
      end
      else
      begin
            Wind.BorderStyle:=bsSizeable;
      end;
      Result:=EngineD3D.CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,Wind.Handle,
      D3DCREATE_SOFTWARE_VERTEXPROCESSING,@d3dParams,EngineDevice);
End;

Procedure FreeEngine;stdcall;
Begin
      EngineDevice:=NIL;
      EngineD3D:=NIL;
End;

Function ClearDevice: HResult;stdcall;
Begin
      Result:=E_FAIL;
      If EngineDevice = NIL Then Exit;
      Result:=EngineDevice.Clear(0,NIL,D3DCLEAR_TARGET,D3DCOLOR_XRGB($FF,0,$FF),
      1,0);
End;

Function Render: HResult;stdcall;
Begin
      Result:=ClearDevice;
      If Failed(Result) Then Exit;
      EngineDevice.Present(NIL,NIL,0,NIL);
End;

Exports
        InitEngine,
        FreeEngine,
        ClearDevice,
        Render;
begin
end.
Однако, вылазиет такая ошибка:
Exports allowed only at global scope.
В чём дело?Вроде бы всё за stdcall'ил.
_-Re@l-_ вне форума
Старый 04.11.2010, 11:39   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
Var
    EngineD3D: IDirect3D9;
    EngineDevice: IDirect3DDevice9;
    EngineIsActive:Boolean;
    EngineWindow:Boolean;
    Function InitEngine: HResult;
    Procedure FreeEngine;
    Function ClearDevice: HResult;
    Function Render: HResult;
Попробуйте убрать. Такая ошибка из-за несоответствия открывающего-закрывающего блока.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 04.11.2010, 11:49   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Чёрт, точно! Это просто я скопировал из директории public вместе с переменными и забыл убрать...Спасибо!
_-Re@l-_ вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пытаюсь понять код user32.dll и gdi32.dll Beermonza Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 43 13.07.2010 15:09
Windows I/o без Kernel32.dll и Advapi32.dll coinkrsk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 31 27.06.2010 08:52
[DLL] Загрузка и выгрузка dll в/из чужого процесса Человек_Борща Win Api 4 28.02.2010 17:47
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
Запуск Load.dll (бывшая Load.exe) в дереве проц-ов, Как запустить прогой на C# .dll-ку kapustin Общие вопросы .NET 10 23.09.2009 22:20