Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1301471301
И. Павел
2011-03-30 11:48
2011.07.17
Как узнать id добавленной записи в БД?


1-1259225003
Циркуль
2009-11-26 11:43
2011.07.17
Непредсказуемый порядок обхода контролов


15-1301938826
vrem
2011-04-04 21:40
2011.07.17
Уплавнение: То, ради чего стоит поменять процессор и видеокарту


2-1302495929
Максон
2011-04-11 08:25
2011.07.17
Подмена окончаний в слове


15-1301776193
Юрий
2011-04-03 00:29
2011.07.17
С днем рождения ! 3 апреля 2011 воскресенье





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский