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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2014, 17:28   #1
mihalech19
Пользователь
 
Регистрация: 24.06.2014
Сообщений: 38
По умолчанию Работа с dll написанной на Delphi

Использую библиотеку программы Invisible Secrets. А именно jpgcarrier.dll . Она шифрует\дешифрует файлы совмещая их при этом с jpg изображением. Вот документация по ее использованию: tech.zip
Пишу так:
Код:
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
typedef bool (__stdcall *DllTestFunc)(PChar password);
typedef int (__stdcall *DllTestFunc2)(PChar inFile,PChar outFile, PChar Key);
typedef int (__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 и я ей что-то не то передаю. Тип данных например
mihalech19 вне форума Ответить с цитированием
Старый 10.08.2014, 17:33   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
HANDLE DllTestHandle = LoadLibrary(L"jpgcarrier.dll");
А где проверка на ошибку загрузки либы?
Впрочем ладно.
Поставь проверку хотя бы на то что вернет ActivateLibrary()
I'm learning to live...

Последний раз редактировалось Stilet; 10.08.2014 в 17:36.
Stilet вне форума Ответить с цитированием
Старый 10.08.2014, 17:49   #3
mihalech19
Пользователь
 
Регистрация: 24.06.2014
Сообщений: 38
По умолчанию

ActiveLibrary False возвращает , поэтому я и грешу на типы данных
mihalech19 вне форума Ответить с цитированием
Старый 10.08.2014, 18:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... На какой версии делфи написана ДЛЛ?
Если посмотреть на спецификацию
Цитата:
function ActivateLibrary(password:pchar):boolean;
В доХЕшных делфи этот тип означал ANSI, т.е. однобайтовый символ.
Цитата:
ActivateLibrary(L"1036FB0C1E1331CDC D43C70D43F00D1B0D44EA333AA266BB45") ;
Я правильно понимаю: макрос L"" это преобразование в юникод?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2014, 18:13   #5
mihalech19
Пользователь
 
Регистрация: 24.06.2014
Сообщений: 38
По умолчанию

Я пробовал уже PAnsiChar - не работает
mihalech19 вне форума Ответить с цитированием
Старый 10.08.2014, 18:15   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Для начала L убери )
Хотя бы чтоб проверить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2014, 18:15   #7
mihalech19
Пользователь
 
Регистрация: 24.06.2014
Сообщений: 38
По умолчанию

Я убирал) Оно бы не скомпилировалось, если бы не убрал) В документации написано , строка должна быть null-terminated.

Последний раз редактировалось mihalech19; 10.08.2014 в 18:22.
mihalech19 вне форума Ответить с цитированием
Старый 10.08.2014, 19:18   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну Борланд по идее должен сам позаботиться о том чтоб поставить ноль в конце строки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2014, 19:26   #9
mihalech19
Пользователь
 
Регистрация: 24.06.2014
Сообщений: 38
По умолчанию

Ума не приложу, что я не так делаю. Ведь сама программа как-то использует эту библиотеку
mihalech19 вне форума Ответить с цитированием
Старый 11.08.2014, 09:43   #10
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

А что значит "DecryptFile не находит"? Не находит что именно?
FataLL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение из Delphi к DLL написанной на C++ smirnoff843 Общие вопросы Delphi 6 21.03.2017 11:13
Как использовать в Delphi-программе функции из DLL, написанной на C# АТИКОН Общие вопросы Delphi 12 19.03.2013 08:28
Вызов функций из DLL написанной на Delphi Boris777 Общие вопросы C/C++ 2 20.12.2011 10:53
C# импорт метода из Dll написанной на C++ head-dron Общие вопросы .NET 1 27.09.2010 20:57