Другие языки программирования и технологии
Как в C++ Builder 6 произвести ипорт процедуры Dll?
Есть Dll библиотека в каторой находиться нужная мне процедура, ни каких дополнительных файлов к ней нет, чисто Dll. Как в С++ произвести вызов процедуры из этой Dll?
Привет.
Есть 2 способа загрузки DLL: динамическая, статическая загрузка.
Со статической я помню возился, что-то нахимичено.. . А динамическая загрузка вот, например (выкладываю весь текст заголовочного файла, попробуйте разобраться).. .
п. с. Погуглите, по теме загрузки DLL просто МОРЕ инфы.
#include <windows.hpp>
const PChar CAL32_LIB = "Calibration32.dll";
#pragma pack(push, 1)
typedef struct
{
char about[256];
char type[256];
int version;
TDateTime date;
} tagCALIBRATIONINFO;
#pragma pack(pop)
HINSTANCE lib = NULL;
bool (__stdcall *calibration_free)(int index) = NULL;
bool (__stdcall *calibration_load)(int index, PChar file_name) = NULL;
bool (__stdcall *calibration_calc)(int index, double pix, double line, PDouble x, PDouble y, PDouble z) = NULL;
bool (__stdcall *calibration_calc_points)(int index, Pointer point, int count) = NULL;
bool (__stdcall *calibration_info)(int index, tagCALIBRATIONINFO * info) = NULL;
void calibration_lib_free()
{
if (lib)
FreeLibrary(lib);
lib = NULL;
calibration_free = NULL;
calibration_load = NULL;
calibration_calc = NULL;
calibration_calc_points = NULL;
calibration_info = NULL;
};
bool calibration_lib_init()
{
lib = LoadLibraryA(CAL32_LIB);
if (!lib) return false;
calibration_free = (bool (__stdcall *)(int))GetProcAddress(lib, "CalibrationFree");
calibration_load = (bool (__stdcall *)(int, PChar))GetProcAddress(lib, "CalibrationLoad");
calibration_calc = (bool (__stdcall *)(int, double, double, PDouble, PDouble, PDouble))GetProcAddress(lib, "CalibrationCalc");
calibration_calc_points = (bool (__stdcall *)(int, Pointer, int))GetProcAddress(lib, "CalibrationCalcPoints");
calibration_info = (bool (__stdcall *)(int, tagCALIBRATIONINFO *))GetProcAddress(lib, "CalibrationInfo");
bool done = (calibration_free && calibration_load && calibration_calc && calibration_calc_points && calibration_info);
if (!done) calibration_lib_free();
return done;
};
Есть 2 способа загрузки DLL: динамическая, статическая загрузка.
Со статической я помню возился, что-то нахимичено.. . А динамическая загрузка вот, например (выкладываю весь текст заголовочного файла, попробуйте разобраться).. .
п. с. Погуглите, по теме загрузки DLL просто МОРЕ инфы.
#include <windows.hpp>
const PChar CAL32_LIB = "Calibration32.dll";
#pragma pack(push, 1)
typedef struct
{
char about[256];
char type[256];
int version;
TDateTime date;
} tagCALIBRATIONINFO;
#pragma pack(pop)
HINSTANCE lib = NULL;
bool (__stdcall *calibration_free)(int index) = NULL;
bool (__stdcall *calibration_load)(int index, PChar file_name) = NULL;
bool (__stdcall *calibration_calc)(int index, double pix, double line, PDouble x, PDouble y, PDouble z) = NULL;
bool (__stdcall *calibration_calc_points)(int index, Pointer point, int count) = NULL;
bool (__stdcall *calibration_info)(int index, tagCALIBRATIONINFO * info) = NULL;
void calibration_lib_free()
{
if (lib)
FreeLibrary(lib);
lib = NULL;
calibration_free = NULL;
calibration_load = NULL;
calibration_calc = NULL;
calibration_calc_points = NULL;
calibration_info = NULL;
};
bool calibration_lib_init()
{
lib = LoadLibraryA(CAL32_LIB);
if (!lib) return false;
calibration_free = (bool (__stdcall *)(int))GetProcAddress(lib, "CalibrationFree");
calibration_load = (bool (__stdcall *)(int, PChar))GetProcAddress(lib, "CalibrationLoad");
calibration_calc = (bool (__stdcall *)(int, double, double, PDouble, PDouble, PDouble))GetProcAddress(lib, "CalibrationCalc");
calibration_calc_points = (bool (__stdcall *)(int, Pointer, int))GetProcAddress(lib, "CalibrationCalcPoints");
calibration_info = (bool (__stdcall *)(int, tagCALIBRATIONINFO *))GetProcAddress(lib, "CalibrationInfo");
bool done = (calibration_free && calibration_load && calibration_calc && calibration_calc_points && calibration_info);
if (!done) calibration_lib_free();
return done;
};
Арсений Анатольевич
Сишка просто адски неудобно работает с прототипами функций... Возможно можно было описать и проще, но я не на сях программирую, так чо...
Похожие вопросы
- Как научиться программировать на C++ с нуля, имея под рукой среду разработки Borland C++ Builder 6.0
- Стоит ли учить Borland C++ Builder 6
- Какой принцип обращения в c++ builder 6 к com порту для приема/передачи пакетов информации от внешнего устройства?
- Какую выбрать среду программирования для C++/Visual C++ для учебных целей кроме CodeGear Delphi+C++ Builder?
- heloword не запускается!? вопрос внутри!и код C+ builder! программа на С!
- C++ Builder. Вопрос внутри.
- Слышал такое мнение что C++Builder не круто а настоящие программеры пользуют visual c++, правда ли это ?
- Щас думаю какой качать учебник по С++ но тут Визуал и Бьюлдер что лучше учить Visual C++ или C++ Builder
- У кого нибудь есть таблица описания кода ошибкок в Delphi (C++ Builder)?
- Проблемы с кодировкой в компиляторе Borland C++ Builder