Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
1

Не получается вызвать функции из dll, написанной на Delphi

10.08.2014, 14:50. Показов 2345. Ответов 20
Метки нет (Все метки)

Использую библиотеку программы Invisible Secrets. А именно jpgcarrier.dll . Она шифрует\дешифрует файлы совмещая их при этом с jpg изображением. Вот документация по ее использованию: TechSpecif.doc.
Пишу так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
typedef void (__stdcall *DllTestFunc)(PChar password);
typedef void (__stdcall *DllTestFunc2)(PChar inFile,PChar outFile, PChar Key);
typedef void (__stdcall *DllTestFunc3)(HANDLE app);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HANDLE DllTestHandle = LoadLibrary(L"jpgcarrier.dll");
DllTestFunc3 SetWndHandle = (DllTestFunc3)GetProcAddress((HINSTANCE__*)DllTestHandle,"SetWndHandle");
DllTestFunc ActivateLibrary = (DllTestFunc)GetProcAddress((HINSTANCE__*)DllTestHandle,"ActivateLibrary");
DllTestFunc2 DecryptFile = (DllTestFunc2)GetProcAddress((HINSTANCE__*)DllTestHandle,"DecryptFile");
if(SetWndHandle)
SetWndHandle(Application->Handle);
else
ShowMessage(L"Function is not founded 1");
if(ActivateLibrary)
ActivateLibrary(L"1036FB0C1E1331CDCD43C70D43F00D1B0D44EA333AA266BB45");
else
ShowMessage(L"Function is not founded 2");
if(DecryptFile)
DecryptFile(L"blabla.jpg", L"blabla.rar", L"password");
   else
ShowMessage("Function is not founded 3");
FreeLibrary((HINSTANCE__*)DllTestHandle);
 }
DecryptFile не находит, как-будто функция ActivateLibrary() не активировала библиотеку. Может дело в том, что сама библиотека написана на Delphi и я ей что-то не то передаю. Тип данных например
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2014, 14:50
Ответы с готовыми решениями:

Вызов программой, написанной на С++, функции из dll, написанной на Assembler (явное подключение dll)
Доброго времени суток!Задали лабораторную работу: программа, написанная на с++ должна подключать...

Вызов функции из DLL, написанной на Delphi
Здрасте, У меня тут такая ситуация: Рыскал как то я, по просторам интернета, решение 1 проблемы,...

Вызов функции из dll написанной на delphi из python
Импортировал ctypes, подключился к dll. Есть например такая функция: function...

Как вызвать функцию из dll, написанной на C++?
Здравствуйте, как вызвать данную функцию правильно: extern int __stdcall CheckRequestA(char *...

20
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.08.2014, 17:36 2
Лучше прямую ссылку на скачивание DLL приведи.

Добавлено через 1 минуту
И предположу что PChar стоит заменить на PAnsiChar или char*
0
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
10.08.2014, 17:37  [ТС] 3
Вот jpgcarrier.rar
PAnsiChar и char* пробовал уже
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.08.2014, 17:40 4
C++
1
HANDLE DllTestHandle = LoadLibrary(L"jpgcarrier.dll");
А проверить хендл ? может оно DLL не нашло ?
И вообще проверки где ?

C++
1
2
HANDLE DllTestHandle = LoadLibrary(L"jpgcarrier.dll");
if(DllTestHandle==NULL) ShowMessage("DLL не загружена!");
2
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
10.08.2014, 17:43  [ТС] 5
Оно нашло dll , не находит функции шифрования\дешифрования , их нельзя использовать пока не активируешь библиотеку
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.08.2014, 18:52 6
C++
1
ActivateLibrary(L"1036FB0C1E1331CDCD43C70D43F00D1B0D44EA333AA266BB45");
Параметр ключ активации?
Если до та, то попробуй заменить на PAnsiChar и не использовать префикс L в этой ф-ции при передаче строки.
1
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
10.08.2014, 18:54  [ТС] 7
Я уже пробовал... Уже не знаю, что делать. Когда нашел документацию к либе подумал сразу, что проблем не должно возникнуть, а тут вот оно как
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.08.2014, 18:57 8
Еще раз попробуй, нефиг тыкать наугад, нужно точно знать что там используется char* или wchar_t*
1
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
10.08.2014, 18:59  [ТС] 9
Отличный совет! Знаешь сколько я раз уже пробовал? Я наверное уже все типы данных перебрал
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.08.2014, 19:04 10
Я и говорю ты тычешь наугад, вместо того что бы реально узнать что там используется.
1
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
10.08.2014, 19:05  [ТС] 11
А как я узнаю? В документации написанно PChar, но это delphi и возможно старая версия
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.08.2014, 19:06 12
Примеры, есть к этой библиотеке ? В какой версии Делфи они написаны, ну и вероятно стоило сразу ссылку на оф. сайт кинуть.

Откуда уверенность что ключ активации тот же? Откуда уверенность что соглашение о вызове stdcall ?
1
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
10.08.2014, 19:09  [ТС] 13
Ссылка на сайт: http://www.invisiblesecrets.com/ . Ссылку на документацию я кидал в главпосте. Вот, что сказано про соглашение:
The functions are exported by name. Functions use the stdcall calling convention.
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.08.2014, 19:14 14
Да но в доке не указано какие символы используются однобайтовые или двухбайтовые, об этом можно было бы конечно судить из примеров (версии делфей)
1
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
10.08.2014, 19:17  [ТС] 15
И то и другое я попробывал.
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.08.2014, 19:21 16
Цитата Сообщение от mihalech19 Посмотреть сообщение
И то и другое я попробывал.
Значит не судьба.
0
3 / 3 / 4
Регистрация: 23.06.2014
Сообщений: 126
10.08.2014, 19:23  [ТС] 17
Ага, спасибо за поддержку)
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.08.2014, 19:26 18
Такому подходу можно только посочувствовать.
0
1447 / 1119 / 345
Регистрация: 11.04.2011
Сообщений: 2,615
11.08.2014, 04:26 19
mihalech19, а вас не смущает, что в сигнатуре функции ActivateLibrary возвращаемым типом является тип bool, а не void? Не факт, что это что то изменит, но тем не менее ...
0
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
11.08.2014, 10:41 20
mihalech19, ActivateLibrary должна вернуть true, если ключ активации правильный. Что она возвращает?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2014, 10:41
Помогаю со студенческими работами здесь

Не получается вызвать функцию из простейшей библиотеки, написанной на C++
Братва, спасай! Я уже все волосы с груди содрал! Создал новую библиотеку, чистую, чтоб уж...

Есть исходник DLL на Delphi как (и возможно ли) написать похожее на VB.NET и использовать в среде программы написанной на Delphi
Суть вопроса вкратце такова - Есть исходник DLL написанной на Delphi Library Extdll; uses ...

Переменные из DLL, написанной на Delphi
Добрый день, возникла проблема с передачей аргументов в функцию, импортированную из внешней DLL...

Работа с DLL, написанной на Delphi
Доброго всем времени суток. В C# мягко говоря новичок и, честно признаться, немного не в курсе,...

Адаптация DLL, написанной на С++, к Delphi
Есть одна DLL библиотека из которой мне нужно достать функции. Чтобы с этими функциями работать...

Подключение DLL, написанной на Delphi
Здравствуйте, помогите пожалуйста подключить Delphi dll к проекту c#. Вот сама dll library...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru