Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.07.17;
Скачать: CL | DM;

Вниз

Интеграция кода ид С++ DLL В Delphi   Найти похожие ветки 

 
zulus ©   (2011-04-12 01:31) [0]

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

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);


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

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


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


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

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


 
KilkennyCat ©   (2011-04-12 07:32) [3]

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


 
zulus ©   (2011-04-12 08:43) [4]

Данный код из библиотеки. Хочестся использовать ее. Однако столкнулся с трудностью, не могу вызвать функцию 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
....

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


 
zulus ©   (2011-04-12 08:45) [5]


> Германн

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


 
icWasya ©   (2011-04-12 09:37) [6]

Вот это
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 20:42) [7]

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


 
zulus ©   (2011-04-12 22:52) [8]

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


 
clickmaker ©   (2011-04-12 22:57) [9]

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


 
zulus ©   (2011-04-13 01:35) [10]

все победил. Интересная ....
ИТАК есть 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#


 
Inovet ©   (2011-04-13 01:47) [11]

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

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

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


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


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

Кому нужно?



Страницы: 1 вся ветка

Текущий архив: 2011.07.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.011 c
15-1302074023
Sergey
2011-04-06 11:13
2011.07.17
График на делфи!


15-1301633276
И. Павел
2011-04-01 08:47
2011.07.17
Тормозит обращение к MS SQL SERVER, причем только иногда


2-1302088974
ddd329
2011-04-06 15:22
2011.07.17
Заголовок в Indy корявый


15-1301622421
Palladin
2011-04-01 05:47
2011.07.17
1 апреля


2-1302263393
aldis
2011-04-08 15:49
2011.07.17
Listview, подскажите как сварганить