Форум: "Начинающим";
Текущий архив: 2011.07.17;
Скачать: [xml.tar.bz2];
ВнизИнтеграция кода ид С++ 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c