Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » defstruct

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
04.08.2003, 17:38 Uhr
~Gast
Gast


Hi Leute,
ich arbeite gerade an einer Twain anwendung!! Habe jedoch null erfahrungen mit Twain!! Kann mir jemand helfen wenn ich ihm den Code schicke?? Per icq oder so?? Kann nicht so schwer sein, aber ich blicke da nicht durch!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.08.2003, 18:01 Uhr
0xdeadbeef
Gott
(Operator)


Poste ihn doch hier <AOL>!!!!!1!!!!!1!!!!</AOL> Dann hilft dir bestimmt wer <AOL>!!1!1!!!!!</AOL> Vor allem, wenn du noch sagst, was genau du nicht verstehst <AOL>!!1!1!!1!!!!!</AOL>
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.08.2003, 11:51 Uhr
~Gast
Gast


Okay dann will ich aml versuchen das Problem zu erklären.
Ich habe von einem Hersteller von scannern eine Header-Datei bekommen in der beschrieben ist wie ich den Scanner aus meinen Programm über Twain Calibrieren kann ohne das deren Sofware aufgeht.

Der Code

C++:

//
//

#ifdef macintosh
#include <TWAIN/TWAIN.h>
#else
#include "twain.h"
#endif


// CAP_NEEDSCALIBRATION
// Description: If TRUE, indicates the scanner calibration data is
// not present. In this case, calibration data must be generated
// via CAP_CALIBRATE before scanning will succeed. Note that
// calibration is only required before the first scan after scanner
// installation since the data persists on the host computer.
// Type:                    TW_BOOL
// Default Value:            none
// Allowed Values:            TRUE or FALSE
// MSG_GET container:        TW_ONEVALUE
// MSG_SET container:        MSG_SET not allowed

const TW_UINT16 CAP_NEEDSCALIBRATION = CAP_CUSTOMBASE + 0x3e00;


// CAP_CALIBRATE
// Description: When set to TRUE, the Source prompts the user to
// insert the calibration target, verifies that the scanner has
// something to scan (e.g. the calibration target) then calls a low-
// level calibration routine. If calibration fails, an error message
// is displayed. Set CAP_INDICATORS to FALSE to call the low-level
// calibration routine without any user interface (i.e. user prompt
// or error dialog). When the UI is spressed, CAP_FEEDERLOADED
// should be used to verify that the calibration target is loaded
// before calling CAP_CALIBRATE.
// Result codes:
//    TWRC_SUCCESS calibration successful or user canceled
//    TWRC_FAILURE calibration failed
// Type:                    TW_BOOL
// Default Value:            FALSE
// Allowed Values:            TRUE or FALSE
// MSG_GET/SET container:    TW_ONEVALUE

const TW_UINT16 CAP_CALIBRATE = CAP_CUSTOMBASE + 0x3e01;


// CAP_PREFEEDPAPER
// Description: When set to TRUE, the Source feeds the paper by a
// small amount. This capability is useful for "grabbing" (i.e.
// prefeeding) the paper before scanning or calibrating. Poll with
// CAP_FEEDERLOADED about every 500ms. When CAP_FEEDERLOADED changes
// from FALSE to TRUE, set this capability to TRUE.
// Type:                    TW_BOOL
// Default Value:            FALSE
// Allowed Values:            TRUE or FALSE
// MSG_GET/SET container:    TW_ONEVALUE

const TW_UINT16 CAP_PREFEEDPAPER = CAP_CUSTOMBASE + 0x3e02;






Nun habe ich eine zweite Classe mit der Ich uf Twain zugreife!!


C++:

#ifndef __TWAINCPP_
#define __TWAINCPP_

#include "windows.h"
#include "Twain.h"


#define TWCPP_ANYCOUNT        (-1)
#define TWCPP_CANCELTHIS    (1)
#define TWCPP_CANCELALL        (2)
#define TWCPP_DOTRANSFER    (0)

class CTwain
{
public:


    CTwain(HWND hWnd = NULL);
    virtual ~CTwain();
    BOOL InitTwain(HWND hWnd);
    void ReleaseTwain();


    /*  
      This routine must be implemented by the dervied class
      After setting the required values in the m_AppId structure,
      the derived class should call the parent class implementation
      Refer Pg: 51 of the Twain Specification version 1.8
    */

    virtual void GetIdentity();
    virtual BOOL SelectSource();
    virtual BOOL OpenSource(TW_IDENTITY *pSource=NULL);
    virtual int  ShouldTransfer(TW_IMAGEINFO& info) { return TWCPP_DOTRANSFER;};
    
    BOOL ProcessMessage(MSG msg);

    BOOL SelectDefaultSource();
    BOOL IsValidDriver() const;
    BOOL SourceSelected() const {return m_bSourceSelected;} ;
    BOOL DSMOpen() const;
    BOOL DSOpen() const;
    BOOL SourceEnabled() const { return m_bSourceEnabled;};
    BOOL ModalUI() const { return m_bModalUI; };

    TW_INT16 GetRC() const { return m_returnCode; };
    TW_STATUS GetStatus() const { return m_Status; };

    BOOL SetImageCount(TW_INT16 nCount = 1);
    BOOL Acquire(int numImages=1);

protected:
    BOOL CallTwainProc(pTW_IDENTITY pOrigin,pTW_IDENTITY pDest,
                       TW_UINT32 DG,TW_UINT16 DAT,TW_UINT16 MSG,
                       TW_MEMREF pData);
    TW_UINT16 CallDSMEntry(pTW_IDENTITY pApp, pTW_IDENTITY pSrc,
                       TW_UINT32 DG, TW_UINT16 DAT, TW_UINT16 MSG,
                       TW_MEMREF pData);

    void CloseDSM();
    void CloseDS();

    BOOL GetCapability(TW_CAPABILITY& twCap,TW_UINT16 cap,TW_UINT16 conType=TWON_DONTCARE16);
    BOOL GetCapability(TW_UINT16 cap,TW_UINT32& value);
    BOOL SetCapability(TW_UINT16 cap,TW_UINT16 value,BOOL sign=FALSE);
    BOOL SetCapability(TW_CAPABILITY& twCap);
    BOOL EnableSource(BOOL showUI = TRUE);

    BOOL GetImageInfo(TW_IMAGEINFO& info);

    virtual BOOL DisableSource();
    virtual BOOL CanClose()  { return TRUE; };

    void TranslateMessage(TW_EVENT& twEvent);
    void TransferImage();
    BOOL EndTransfer();
    void CancelTransfer();
    BOOL ShouldContinue();
    BOOL GetImage(TW_IMAGEINFO& info);

    virtual void SetImage(HANDLE hBitmap,TW_IMAGEINFO& info)=0;
//    virtual void CopyImage(HANDLE hBitmap,TW_IMAGEINFO& info);

protected:
    HINSTANCE m_hTwainDLL;
    DSMENTRYPROC m_pDSMProc;

    TW_IDENTITY m_AppId;
    TW_IDENTITY m_Source;
    TW_STATUS m_Status;
    TW_INT16  m_returnCode;
    HWND m_hMessageWnd;

    BOOL m_bSourceSelected;
    BOOL m_bDSMOpen;
    BOOL m_bDSOpen;
    BOOL m_bSourceEnabled;
    BOOL m_bModalUI;

    int m_nImageCount;
};


#endif





Von dieser Classe muß ich die Funktion

C++:

BOOL SetCapability(TW_CAPABILITY& twCap);


oder

C++:
BOOL SetCapability(TW_UINT16 cap,TW_UINT16 value,BOOL sign=FALSE);



benutzen.
Jetzt hört es aber schon auf!! Was muß ich der funktion wie übergeben??
Hier noch die Funtion


C++:
OOL CTwain::SetCapability(TW_CAPABILITY& cap)
{
    if(DSOpen())
    {
        return CallTwainProc(&m_AppId,&m_Source,DG_CONTROL,DAT_CAPABILITY,MSG_SET,(TW_MEMREF)&cap);
    }
    return FALSE;
}




Mein bisherriger Versuch sieht so aus:

C++:

typedef struct {

    TW_UINT16 Cap;

    TW_UINT16 ConType;

    TW_HANDLE hContainer;

    } TW_CAPABILITY;

    TW_CAPABILITY twc;
    twc.Cap=CAP_CALIBRATE;
    twc.ConType=TWON_ONEVALUE;
    //twc.hContainer=TWON_ONEVALUE;
    

    SetCapability(twc);


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.08.2003, 12:08 Uhr
0xdeadbeef
Gott
(Operator)


Doppelpost gelöscht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.08.2003, 12:12 Uhr
~Gast
Gast


Danke war auch nur damit der Code leichter zu lesen ist (hatte <code> mit <cpp> verwechselt)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.08.2003, 12:16 Uhr
0xdeadbeef
Gott
(Operator)


Das struct TW_CAPABILITY ist wohl schon in der twain.h definiert, das typedef kannst du dir also sparen. Wenn ich das richtig verstehe, sind die Werte CAP_NEEDSCALIBRATION, CAP_CALIBRATE und CAP_PREFEEDPAPER Bezeichner, mit denen man die Variablen zur Laufzeit erreicht. Hab ich erwähnt, dass ich late-binding hasse? Wenn du der CTwain-Instanz also mitteilen willst, dass der Scanner kalibriert werden muss, sähe der Aufruf so aus:

C++:
CTwain t;

//...

t.SetCapability(CAP_NEEDSCALIBRATION, TRUE);


für die anderen Dinger analog.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.08.2003, 12:42 Uhr
~Gast
Gast


Geht leider nicht!
Das Objekt CTwain mus nicht erstellt werden da mein QDialog davon abgeleitet ist!!
Die Funktion

C++:
SetCapability(CAP_NEEDSCALIBRATION, TRUE);


läßt sich so wie du es beschrieben hast nicht aufrufen!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.08.2003, 13:32 Uhr
0xdeadbeef
Gott
(Operator)


Compilerfehler, Laufzeitfehler, was ist die Fehlermeldung? Ich brauch schon ein bisschen mehr Info.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.08.2003, 13:39 Uhr
~Gast
Gast


Gerne! Ich bin jetzt soweit das ich ein struct vom Typen

C++:
    TW_CAPABILITY twc;
    twc.Cap=CAP_PREFEEDPAPER;
    twc.ConType=TWON_ONEVALUE;
    twc.hContainer=GlobalAlloc(GHND,sizeof (TWON_ONEVALUE));


habe.
Der funktionsaufruf

C++:
SetCapability(twc);


scheint richtig zu sein!! Er Compiliert auf jeden Fall wieder! Nur die Function löst nichts aus! Wenn ich debug dann springt er in die Funktion gibt aber ein FALSE zurück!!
Und genau da hört mein Latein auf! Ich habe keine Ahnung wie Twain arbeitet ,was ich noch einstellen muß etc. Eine beschreibung für die TwainCpp.h gibt es auch nicht!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.08.2003, 14:47 Uhr
0xdeadbeef
Gott
(Operator)


Mit deinem selbstdefinierten Typen ist es kein Wunder, wenn das nicht läuft. Du musst schon den nehmen, den twain mitliefert. Wenn der Aufruf

C++:
SetCapability(CAP_NEEDSCALIBRATION, TRUE);


nicht läuft, hast du wahrscheinlich ein Linkerproblem. Aus welchen Dateien besteht dein Projekt, was steht in welcher Datei, und welche Fehlermeldung wirft der Compiler raus, wenn du versuchst, meinen Vorschlag zu kompilieren? Hast du alle Klassen sauber in Header- und cpp-Datei getrennt?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: