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

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Передать переменную из программы в dll, Передать переменную из программы в dll 
V
    Опции темы
Kostya-xp
  Дата 5.2.2006, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Можно ли передать значение переменной из программы определенной процедуре, хранящейся в dll и затем вызвать её оттуда smile
PM MAIL   Вверх
Albinos_x
Дата 5.2.2006, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108





--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Kostya-xp
Дата 5.2.2006, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Albinos_x я не хочу программе передать сообщение, мне надо передать значение переменной из программы в ПРОЦЕДУРУ, КОТОРАЯ ХРАНИТСЯ В DLL и потом этой же программой вызвать её от туда.

smile smile
Добавлено @ 02:08
Вообщем во время того, как вызывается процедура из dll нужно передать ей значение переменной, которая находится в самой программе (т.е. EXE файле).

Это сообщение отредактировал(а) Kostya-xp - 5.2.2006, 02:04
PM MAIL   Вверх
Partizan
Дата 5.2.2006, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



ммм....а какие проблемы....? в C++ Builder это решается довольно просто....
подгружаем ДЛЛку получаем указатель на нужную функцию посредством GetProcAddress и вызываем её с нужными параметрами...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Kostya-xp
Дата 5.2.2006, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Partizan Напиши пример на Си пожалуйста smile
PM MAIL   Вверх
Partizan
Дата 5.2.2006, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



пусть есть скомпиленная дллка с функцией:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#include "DLL_FUNCT.h"
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}
void msg()
{
 ShowMessage(111);
}
//---------------------------------------------------------------------------



DLLFUNCT.h:

Код

#ifndef __MYDLL_H
#define __MYDLL_H

#ifdef __DLL__
#   define DLL_EI __declspec(dllexport)
#else
#   define DLL_EI __declspec(dllimport)
#endif

extern "C" void DLL_EI msg();

#endif


это у нас всё в ДЛЛ скомпилено....

а в проге делаем следуюшее:

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "DLL_FUNCT.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
void (__stdcall *MsgFunct)();
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
HINSTANCE dllInst = LoadLibrary("Project1.dll");

MsgFunct = (void (__stdcall*)())GetProcAddress(dllInst,"_msg");
MsgFunct();
FreeLibrary(dllInst);
}
//---------------------------------------------------------------------------




--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Poseidon
Дата 5.2.2006, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Пусть у нас в Dll есть процедура: procedure MyDllProcedyre(perem : integer);

Код

type 
  TMyProcedyre = procedure(perem : integer); // тип, который описывает процедуру в Dll

...

var
MyPerem: integer;  // наша переменная, каторую будем передавать.
hDll: THandle; // Handle библиотеки
MyProcedyre: TMyProcedyre; // наша процедура
begin
MyPerem:= 10; // присвоим знаение нашей переменной
hDll:= LoadLibrary('MyLib.dll'); // загрузим Dll
try
@MyProcedyre:= GetProcAddress(hDll, 'MyDllProcedyre'); // получим указател на нашу процедуру в Dll
MyProcedyre(MyPerem); // выполним процедуру, каторая в dll
finally FreeLibrary(hDll); end; // выгрузим dll
end;


Это сообщение отредактировал(а) Poseidon - 5.2.2006, 03:24


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Kostya-xp
Дата 5.2.2006, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Теперь все понятно. smile Всем БОЛЬШОЕ СПАСИБО!


M
Girder
Не надо баловать размером шрифта!
PS: Тема закрыта

PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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