Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Интеграция кода ид С++ DLL В Delphi [D7, D2005, XP, 2003]


zulus ©   (2011-04-12 01:31:00) 

Господа помогите ни как не могу подчинить вызов функций из С библиотеки. Декодирование факс-листа

typedef int (__stdcall *DecodeComplect_FUNC_PTR)(unsigned char *Buf, int LenBuf, int FaxQuality, int FaxCoding,int &cancelFlag,int PageNumber);

DecodeComplect_FUNC_PTR SaveFunc=NULL; //Будет вызываться при декодировании страницы

int _stdcall AddFile(LPSTR _InFile);
int _stdcall Decode(DecodeComplect_FUNC_PTR fsf);


Германн   (2011-04-13 03:01:00) [1]


> zulus ©   (12.04.11 08:45) [5]
>
>
> > Германн
>
> Прежде чем обливать, разберись, что нужно.

Кому нужно?


Inovet   (2011-04-13 01:47:00) [2]

> [10] zulus ©   (13.04.11 01:35)
> Почему то параметры передаются слева на право, так и не
> понял почему.

А ответы не смотрим?

> [9] clickmaker ©   (12.04.11 22:57)
> stdcall;


zulus   (2011-04-13 01:35:00) [3]

все победил. Интересная ....
ИТАК есть h файл библиотеки, где объявлено:

#include "windows.h"
#pragma once

typedef int (__stdcall *DecodeComplect_FUNC_PTR)(unsigned char *Buf, int LenBuf, int FaxQuality, int FaxCoding,int &cancelFlag,int PageNumber);

DecodeComplect_FUNC_PTR SaveFunc=NULL; //Будет вызываться при декодировании страницы

int _stdcall AddFile(LPSTR _InFile);
int _stdcall Decode(DecodeComplect_FUNC_PTR fsf);

Требовалось подгрузить ее средствами DElphi

код следующий:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons;

Type
 FUNC_CallBack = function  ( HdlcQuality, PageNumber: Byte; Var cancelFlag: Integer; FaxCoding, FaxQuality: Integer; LenBuf: Integer; Buf : PChar) :Integer; stdcall;
 //
 //

 Function AddFile( inFileName: PChar): Integer; stdcall; external 'DFax.dll';
 Function Decode( FUNC_PTR: FUNC_CallBack ): Integer; stdcall; external 'DFax.dll';

type
 TForm1 = class(TForm)
   BitBtn1: TBitBtn;
...
implementation

{$R *.dfm}

Function FUNC_PTR  (HdlcQuality, PageNumber: Byte; Var cancelFlag: Integer; FaxCoding, FaxQuality: Integer; LenBuf: Integer; Buf : PChar ) :Integer;
Var File_Out_Stream: TMemoryStream;
   I: Integer;
   A: Array of Byte;
begin
// что должно быть здесь - смотреть в документации на DLL
 File_Out_Stream := TMemoryStream.Create;
 Try
   File_Out_Stream.Position := 0;
   SetLength( A, LenBuf );
   CopyMemory( A, Buf, LenBuf );
   File_Out_Stream.Write( Pointer(A)^, LenBuf );
   File_Out_Stream.Position := 0;
   File_Out_Stream.SaveToFile( 'D:\OutFax\1.bmp' );
 Finally
   File_Out_Stream.Free;
 End;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
Var PFunction: FUNC_CallBack;
begin
// попытка загрузки библиотеки
AddFile( PChar( 'D:\OutFax\R04910031918170FAXZMU0000692.004.fax' ) );
PFunction := @FUNC_PTR;

If Decode( PFunction ) = 0 Then
end;

Почему то параметры передаются слева на право, так и не понял почему.
Если кто объяснит, буду признателен. Код подбирал, исходя из работающего кода в C#


clickmaker   (2011-04-12 22:57:00) [4]

Function DecodeComplect_FUNC (Buf:PChar; LenBuf, FaxQuality, FaxCoding :Integer; var cancelFlag:Integer; PageNumber:Integer):Integer; stdcall;


zulus   (2011-04-12 22:52:00) [5]

Что-то не то, не получается ерунда передается какая-то


zulus   (2011-04-12 20:42:00) [6]

Щас попробую
Большое спасибо!!!


icWasya   (2011-04-12 09:37:00) [7]

Вот это
typedef int (__stdcall *DecodeComplect_FUNC_PTR)(unsigned char *Buf, int LenBuf, int FaxQuality, int FaxCoding,int &cancelFlag,int PageNumber);
превращается в

type
 DecodeComplect_FUNC_PTR = function (Buf:PChar; LenBuf, FaxQuality, FaxCoding :Integer; var cancelFlag:Integer; PageNumber:Integer):Integer;stdcall;


Затем нужно самому написать функцию
Function DecodeComplect_FUNC (Buf:PChar; LenBuf, FaxQuality, FaxCoding :Integer; var cancelFlag:Integer; PageNumber:Integer):Integer;
begin
// что должно быть здесь - смотреть в документации на DLL
end;


и где-то в коде сделать вызов

Decode ( DecodeComplect_FUNC );


zulus   (2011-04-12 08:45:00) [8]


> Германн

Прежде чем обливать, разберись, что нужно.


zulus   (2011-04-12 08:43:00) [9]

Данный код из библиотеки. Хочестся использовать ее. Однако столкнулся с трудностью, не могу вызвать функцию Decode.
С функцией AddFile(LPSTR _InFile); все понятно:

Function AddFile( inFileName: PChar): Integer; stdcall; external 'DFax.dll';
Но передача в параметрах функции  Decode - функции меня смущает.

Пытался:
interface
...

Type
 FUNC_CallBack = Function: Integer;
 Function Decode( FUNC_PTR1: FUNC_CallBack ): Integer; stdcall; external 'DFax.dll';

var
 Function FUNC_PTR( Buf: Pointer; BufLen, FaxQuality, FaxCoding, _Cansel,  
                             PageNumber, HdlcQuality: Integer ): Integer;

implementation
....

Но, не понимаю что он вызывает и где интерфейс функции?


KilkennyCat   (2011-04-12 07:32:00) [10]

http://www.google.ru/search?source=ig&hl=ru&rlz=&q=delphi+dll&aq=f&aqi=g10&aql=&oq=


Германн   (2011-04-12 04:30:00) [11]


> KilkennyCat ©   (12.04.11 02:38) [1]
>
> а что, у С++ какие-то свои особенные длл?
>

Не. Просто автор не понимает разницы между С и С++.
Да и вообще мало чего понимает. Выложил из надыбанного исходника пару строк и просит помощи. Только какую помощь он ожидает, если осмысленного вопроса нет?


KilkennyCat   (2011-04-12 02:38:00) [12]

а что, у С++ какие-то свои особенные длл?


Наверх

Титульная страница Поиск, карта сайта Написать письмо