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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2012, 22:22   #1
mrbadge
Пользователь
 
Регистрация: 26.01.2011
Сообщений: 48
По умолчанию Подключение DLL на С++

Есть Dll, написанная на С++. Описание функций и процедур там такое:

Код:
DLL_EXP void __stdcall Name2(int param1, int param2);
DLL_EXP void __stdcall Name3(char* param1);
DLL_EXP char* __stdcall Name5();
Необходимо подключить эту Dll к проекту на Delphi. Делаю так:

Код:
unit DllWork;

interface
uses Windows;
var
  Name2: procedure(param1: Integer; param2: Integer); stdcall;
  Name3: procedure(param1: string); stdcall;
  Name5: function(): string; stdcall;
  DllHandle: THandle;
 
procedure LoadDllandProcs(DllName: string);
procedure Name2_D(param1, param2: Integer);
procedure Name3_D(param1: string);
function Name5_D(): string;

implementation

procedure LoadDllandProcs(DllName: string);
begin
  @Name2:= nil;
  @Name3:= nil;
  @Name5:= nil;
  DllHandle := LoadLibrary(PChar(DllName));
  if DllHandle >= 32 then
  begin
    @Name2 := GetProcAddress(DllHandle, 'Name2');
    @Name3 := GetProcAddress(DllHandle, 'Name3');
    @Name5 := GetProcAddress(DllHandle, 'Name5');
  end;
end;

procedure Name2_D(param1, param2: Integer);
begin
  if @Name2 <> nil then
    Name2(param1, param2);
end;

procedure Name3_D(param1: string);
begin
  if @Name3<> nil then
    Name3(param1);
end;

function Name5_D(): string;
begin
  if @Name5 <> nil then
    Result := Name5;
end;

end.
При выполнении появляются ошибки чтения нулевой и других ячеек памяти (по всей видимости, ошибка в DLL). Но хотелось бы узнать, как правильно подгружать и вызывать процедуры и функции из библиотек? Особенно с функцией, возвращающей char*
mrbadge вне форума Ответить с цитированием
Старый 03.10.2012, 23:13   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

меняйте все string на PAnsiChar
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подключение DLL Lui C# (си шарп) 5 14.01.2012 13:05
подключение сишной dll Zed32 C# (си шарп) 2 25.07.2011 12:03
Подключение DLL Ninetta Общие вопросы .NET 3 01.04.2010 01:06
Подключение DLL __Demon__ C++ Builder 2 09.12.2009 00:29
Подключение DLL 5naip Помощь студентам 9 27.10.2007 20:55