|
From: <mi...@us...> - 2009-09-10 18:56:34
|
Revision: 44
http://twain-samples.svn.sourceforge.net/twain-samples/?rev=44&view=rev
Author: mihailm
Date: 2009-09-10 18:56:25 +0000 (Thu, 10 Sep 2009)
Log Message:
-----------
Fixed bugs:
2844259, 2844276, 2856280, 2856282, 2856287, 2856292
Added:
Multiple connection support
MSVC 2008 project
Modified Paths:
--------------
trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp
trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp
trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.h
trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Sample1.cpp
trunk/TWAIN-Samples/Twain_DS_sample01/src/CommonDS.h
trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.cpp
trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp
trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp
trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp
trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2003.vcproj
trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.vcproj
Added Paths:
-----------
trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerBool.cpp
trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerBool.h
trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2008.sln
trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2008.vcproj
Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2009-08-25 17:48:32 UTC (rev 43)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Base.cpp 2009-09-10 18:56:25 UTC (rev 44)
@@ -989,23 +989,6 @@
twrc = TWRC_FAILURE;
}
break;
- case CAP_AUTOFEED:
- if(TWON_ONEVALUE == _pCap->ConType)
- {
- TW_ONEVALUE *pCap = (TW_ONEVALUE*)_DSM_LockMemory(_pCap->hContainer);
-
- if(!pCap || pCap->ItemType != TWTY_BOOL || pCap->Item==0)
- {
- twrc = TWRC_FAILURE;
- }
- _DSM_UnlockMemory(_pCap->hContainer);
- }
- else
- {
- setConditionCode(TWCC_CAPBADOPERATION);
- twrc = TWRC_FAILURE;
- }
- break;
case ICAP_MAXFRAMES:
if(TWON_ONEVALUE == _pCap->ConType)
{
Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp 2009-08-25 17:48:32 UTC (rev 43)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.cpp 2009-09-10 18:56:25 UTC (rev 44)
@@ -90,8 +90,9 @@
};
//////////////////////////////////////////////////////////////////////////////
-CTWAINDS_FreeImage::CTWAINDS_FreeImage()
+CTWAINDS_FreeImage::CTWAINDS_FreeImage(TW_IDENTITY AppID)
{
+ m_AppID = AppID;
// Setup our identity
fillIdentityStructure(*getIdentity());
return;
@@ -106,6 +107,7 @@
// setup the supported independant caps
CTWAINContainerInt* pnCap = 0;
+ CTWAINContainerBool* pbCap = 0;
m_IndependantCapMap[CAP_SUPPORTEDCAPS] = new CTWAINContainerInt(CAP_SUPPORTEDCAPS, TWTY_UINT16, TWON_ARRAY, TWQC_GETS);
if( NULL == (pnCap = dynamic_cast<CTWAINContainerInt*>(m_IndependantCapMap[CAP_SUPPORTEDCAPS]))
@@ -197,11 +199,11 @@
return TWRC_FAILURE;
}
- m_IndependantCapMap[CAP_UICONTROLLABLE] = new CTWAINContainerInt(CAP_UICONTROLLABLE, TWTY_BOOL, TWON_ONEVALUE, TWQC_GETS);
- if( NULL == (pnCap = dynamic_cast<CTWAINContainerInt*>(m_IndependantCapMap[CAP_UICONTROLLABLE]))
+ m_IndependantCapMap[CAP_UICONTROLLABLE] = new CTWAINContainerBool(CAP_UICONTROLLABLE, (m_AppID.SupportedGroups&DF_APP2)!=0, TWQC_GETS);
+ if( NULL == (pbCap = dynamic_cast<CTWAINContainerBool*>(m_IndependantCapMap[CAP_UICONTROLLABLE]))
/// @todo add UI
// || !pnCap->Add(TRUE, true)
- || !pnCap->Add(FALSE, true) )
+ || !pbCap->Add(FALSE, true) )
{
cerr << "Could not create CAP_UICONTROLLABLE" << endl;
setConditionCode(TWCC_LOWMEMORY);
@@ -259,19 +261,19 @@
return TWRC_FAILURE;
}
- m_IndependantCapMap[CAP_DEVICEONLINE] = new CTWAINContainerInt(CAP_DEVICEONLINE, TWTY_BOOL, TWON_ONEVALUE, TWQC_GETS);
- if( NULL == (pnCap = dynamic_cast<CTWAINContainerInt*>(m_IndependantCapMap[CAP_DEVICEONLINE]))
- || !pnCap->Add(TRUE, true)
- || !pnCap->Add(FALSE) )
+ m_IndependantCapMap[CAP_DEVICEONLINE] = new CTWAINContainerBool(CAP_DEVICEONLINE, (m_AppID.SupportedGroups&DF_APP2)!=0, TWQC_GETS);
+ if( NULL == (pbCap = dynamic_cast<CTWAINContainerBool*>(m_IndependantCapMap[CAP_DEVICEONLINE]))
+ || !pbCap->Add(TRUE, true)
+ || !pbCap->Add(FALSE) )
{
cerr << "Could not create CAP_DEVICEONLINE" << endl;
setConditionCode(TWCC_LOWMEMORY);
return TWRC_FAILURE;
}
- m_IndependantCapMap[CAP_INDICATORS] = new CTWAINContainerInt(CAP_DEVICEONLINE, TWTY_BOOL, TWON_ONEVALUE, TWQC_ALL);
- if( NULL == (pnCap = dynamic_cast<CTWAINContainerInt*>(m_IndependantCapMap[CAP_INDICATORS]))
- || !pnCap->Add(FALSE, true))
+ m_IndependantCapMap[CAP_INDICATORS] = new CTWAINContainerBool(CAP_INDICATORS, (m_AppID.SupportedGroups&DF_APP2)!=0, TWQC_ALL);
+ if( NULL == (pbCap = dynamic_cast<CTWAINContainerBool*>(m_IndependantCapMap[CAP_INDICATORS]))
+ || !pbCap->Add(FALSE, true))
{
cerr << "Could not create CAP_INDICATORS" << endl;
setConditionCode(TWCC_LOWMEMORY);
@@ -287,39 +289,39 @@
return TWRC_FAILURE;
}
- m_IndependantCapMap[CAP_FEEDERENABLED] = new CTWAINContainerInt(CAP_FEEDERENABLED, TWTY_BOOL, TWON_ONEVALUE, TWQC_ALL);
+ m_IndependantCapMap[CAP_FEEDERENABLED] = new CTWAINContainerBool(CAP_FEEDERENABLED, (m_AppID.SupportedGroups&DF_APP2)!=0, TWQC_ALL);
/// @todo to add support for flatbed set to TWQC_ALL and add False as posible value.
- if( NULL == (pnCap = dynamic_cast<CTWAINContainerInt*>(m_IndependantCapMap[CAP_FEEDERENABLED]))
- || !pnCap->Add(TRUE, true) )
+ if( NULL == (pbCap = dynamic_cast<CTWAINContainerBool*>(m_IndependantCapMap[CAP_FEEDERENABLED]))
+ || !pbCap->Add(TRUE, true) )
{
cerr << "Could not create CAP_FEEDERENABLED" << endl;
setConditionCode(TWCC_LOWMEMORY);
return TWRC_FAILURE;
}
- m_IndependantCapMap[CAP_FEEDERLOADED] = new CTWAINContainerInt(CAP_FEEDERLOADED, TWTY_BOOL, TWON_ONEVALUE, TWQC_GETS);
- if( NULL == (pnCap = dynamic_cast<CTWAINContainerInt*>(m_IndependantCapMap[CAP_FEEDERLOADED]))
- || !pnCap->Add(TRUE)
- || !pnCap->Add(FALSE, true) )
+ m_IndependantCapMap[CAP_FEEDERLOADED] = new CTWAINContainerBool(CAP_FEEDERLOADED, (m_AppID.SupportedGroups&DF_APP2)!=0, TWQC_GETS);
+ if( NULL == (pbCap = dynamic_cast<CTWAINContainerBool*>(m_IndependantCapMap[CAP_FEEDERLOADED]))
+ || !pbCap->Add(TRUE)
+ || !pbCap->Add(FALSE, true) )
{
cerr << "Could not create CAP_FEEDERLOADED" << endl;
setConditionCode(TWCC_LOWMEMORY);
return TWRC_FAILURE;
}
- m_IndependantCapMap[CAP_AUTOFEED] = new CTWAINContainerInt(CAP_AUTOFEED, TWTY_BOOL, TWON_ONEVALUE, TWQC_ALL);
- if( NULL == (pnCap = dynamic_cast<CTWAINContainerInt*>(m_IndependantCapMap[CAP_AUTOFEED]))
- || !pnCap->Add(TRUE, true)
- || !pnCap->Add(FALSE) )
+ m_IndependantCapMap[CAP_AUTOFEED] = new CTWAINContainerBool(CAP_AUTOFEED, (m_AppID.SupportedGroups&DF_APP2)!=0, TWQC_ALL);
+ if( NULL == (pbCap = dynamic_cast<CTWAINContainerBool*>(m_IndependantCapMap[CAP_AUTOFEED]))
+ || !pbCap->Add(TRUE, true)
+ || !pbCap->Add(FALSE) )
{
cerr << "Could not create CAP_AUTOFEED" << endl;
setConditionCode(TWCC_LOWMEMORY);
return TWRC_FAILURE;
}
- m_IndependantCapMap[CAP_PAPERDETECTABLE] = new CTWAINContainerInt(CAP_PAPERDETECTABLE, TWTY_BOOL, TWON_ONEVALUE, TWQC_GETS);
- if( NULL == (pnCap = dynamic_cast<CTWAINContainerInt*>(m_IndependantCapMap[CAP_PAPERDETECTABLE]))
- || !pnCap->Add(TRUE, true) )
+ m_IndependantCapMap[CAP_PAPERDETECTABLE] = new CTWAINContainerBool(CAP_PAPERDETECTABLE, (m_AppID.SupportedGroups&DF_APP2)!=0, TWQC_GETS);
+ if( NULL == (pbCap = dynamic_cast<CTWAINContainerBool*>(m_IndependantCapMap[CAP_PAPERDETECTABLE]))
+ || !pbCap->Add(TRUE, true) )
{
cerr << "Could not create CAP_PAPERDETECTABLE" << endl;
setConditionCode(TWCC_LOWMEMORY);
@@ -883,11 +885,11 @@
if(0 != m_Xfers.Count)
{
// Check to see if autofeed is turned on if so automaticly go get next image.
- CTWAINContainerInt *pnCap = dynamic_cast<CTWAINContainerInt*>(findCapability(CAP_AUTOFEED));
- BOOL bAutoFeed = FALSE;
- if(pnCap)
+ CTWAINContainerBool *pbCap = dynamic_cast<CTWAINContainerBool*>(findCapability(CAP_AUTOFEED));
+ bool bAutoFeed = FALSE;
+ if(pbCap)
{
- pnCap->GetCurrent(bAutoFeed);
+ pbCap->GetCurrent(bAutoFeed);
}
if(bAutoFeed)
{
@@ -899,9 +901,9 @@
setConditionCode(TWCC_BUMMER);
twrc = TWRC_FAILURE;
}
+ }
- m_CurrentState = dsState_XferReady;
- }
+ m_CurrentState = dsState_XferReady;
}
else
{
@@ -1082,33 +1084,33 @@
case CAP_INDICATORS:
{
- CTWAINContainerInt *pIntCon = dynamic_cast<CTWAINContainerInt*>(m_IndependantCapMap[CAP_INDICATORS]);
- if( NULL != pIntCon )
+ CTWAINContainerBool *pBoolCon = dynamic_cast<CTWAINContainerBool*>(m_IndependantCapMap[CAP_INDICATORS]);
+ if( NULL != pBoolCon )
{
- pIntCon->SetCurrent(FALSE );
- pRet = pIntCon;
+ pBoolCon->SetCurrent(FALSE );
+ pRet = pBoolCon;
}
}
break;
case CAP_DEVICEONLINE:
{
- CTWAINContainerInt *pIntCon = dynamic_cast<CTWAINContainerInt*>(m_IndependantCapMap[CAP_DEVICEONLINE]);
- if( NULL != pIntCon )
+ CTWAINContainerBool *pBoolCon = dynamic_cast<CTWAINContainerBool*>(m_IndependantCapMap[CAP_DEVICEONLINE]);
+ if( NULL != pBoolCon )
{
- pIntCon->SetCurrent( m_Scanner.getDeviceOnline()?TRUE:FALSE );
- pRet = pIntCon;
+ pBoolCon->SetCurrent( m_Scanner.getDeviceOnline()?TRUE:FALSE );
+ pRet = pBoolCon;
}
}
break;
case CAP_FEEDERLOADED:
{
- CTWAINContainerInt *pIntCon = dynamic_cast<CTWAINContainerInt*>(m_IndependantCapMap[CAP_FEEDERLOADED]);
- if( NULL != pIntCon )
+ CTWAINContainerBool *pBoolCon = dynamic_cast<CTWAINContainerBool*>(m_IndependantCapMap[CAP_FEEDERLOADED]);
+ if( NULL != pBoolCon )
{
- pIntCon->SetCurrent( m_Scanner.isFeederLoaded()?TRUE:FALSE );
- pRet = pIntCon;
+ pBoolCon->SetCurrent( m_Scanner.isFeederLoaded()?TRUE:FALSE );
+ pRet = pBoolCon;
}
}
break;
Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.h
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.h 2009-08-25 17:48:32 UTC (rev 43)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_FreeImage.h 2009-09-10 18:56:25 UTC (rev 44)
@@ -49,7 +49,7 @@
class CTWAINDS_FreeImage : public CTWAINDS_Base
{
public:
- CTWAINDS_FreeImage();
+ CTWAINDS_FreeImage(TW_IDENTITY AppID);
~CTWAINDS_FreeImage();
/**
@@ -196,6 +196,7 @@
TWAINCapabilitiesMap_int m_BitDepthMap; /**< Capability for various Bit Depths */
TWAINCapabilitiesMap_FIX32 m_ICAP_UNIT_Dependant; /**< Capability for any Fix32 based TWAIN container */
CTWAINContainerFrame *m_pICAP_FRAMES; /**< capabiltiy for a FRAMES based containor */
+ TW_IDENTITY m_AppID;
};
Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Sample1.cpp
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Sample1.cpp 2009-08-25 17:48:32 UTC (rev 43)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CTWAINDS_Sample1.cpp 2009-09-10 18:56:25 UTC (rev 44)
@@ -37,14 +37,21 @@
*/
#include "CTWAINDS_Sample1.h"
-
+#include <list>
//////////////////////////////////////////////////////////////////////////////
// Globals
/**
* gloabal pointer of the Data Source, for access to the main DS_Entry.
*/
-CTWAINDS_Base* g_pTWAINLayer = 0;
+typedef struct _DS_inst
+{
+ TW_IDENTITY AppId;
+ CTWAINDS_Base *pDS;
+}DS_inst;
+typedef list<DS_inst> lstDS;
+lstDS g_lstDS;
+
#ifdef TWH_CMP_MSC
/**
* gloadbal Windows Instance handle for the DSM DLL...
@@ -66,8 +73,21 @@
TW_UINT16 _MSG,
TW_MEMREF _pData)
{
+ CTWAINDS_Base* pTWAINLayer = 0;
+
+ if(_pOrigin)
+ {
+ lstDS::iterator llIter=g_lstDS.begin();
+ for(;llIter!=g_lstDS.end();llIter++)
+ {
+ if((*llIter).AppId.Id==_pOrigin->Id)
+ {
+ pTWAINLayer=(*llIter).pDS;
+ }
+ }
+ }
// Curently we are not open
- if( 0 == g_pTWAINLayer )
+ if( 0 == pTWAINLayer )
{
// Special case DSM can request to get identity information about
// DS before it is open. In this special case, where the DS is not
@@ -90,18 +110,23 @@
}
// Open the DS
- g_pTWAINLayer = new CTWAINDS_FreeImage();
- if( NULL == g_pTWAINLayer
- || TWRC_SUCCESS != g_pTWAINLayer->Initialize())
+ pTWAINLayer = new CTWAINDS_FreeImage(*_pOrigin);
+ if( NULL == pTWAINLayer
+ || TWRC_SUCCESS != pTWAINLayer->Initialize())
{
// Failed to create the DS
//setConditionCode(TWCC_LOWMEMORY);
return TWRC_FAILURE;
}
+ DS_inst _DS;
+ _DS.pDS = pTWAINLayer;
+ _DS.AppId = *_pOrigin;
+ g_lstDS.push_back(_DS);
+
}
// If we were not open before, we are now, so continue with the TWAIN call
- TW_INT16 result = g_pTWAINLayer->DS_Entry(_pOrigin, _DG, _DAT, _MSG, _pData);
+ TW_INT16 result = pTWAINLayer->DS_Entry(_pOrigin, _DG, _DAT, _MSG, _pData);
/**
* Special case - free memory if closing DS
@@ -110,10 +135,19 @@
*/
if( TWRC_SUCCESS == result &&
DG_CONTROL == _DG && DAT_IDENTITY == _DAT && MSG_CLOSEDS == _MSG &&
- NULL != g_pTWAINLayer )
+ NULL != pTWAINLayer )
{
- delete g_pTWAINLayer;
- g_pTWAINLayer = 0;
+ lstDS::iterator llIter=g_lstDS.begin();
+ for(;llIter!=g_lstDS.end();)
+ {
+ if((*llIter).AppId.Id==_pOrigin->Id)
+ {
+ delete (*llIter).pDS;
+ llIter = g_lstDS.erase(llIter);
+ continue;
+ }
+ llIter++;
+ }
}
return result;
@@ -142,6 +176,7 @@
g_hinstance = _hmodule;
break;
case DLL_PROCESS_DETACH:
+ unLoadDSMLib();
g_hinstance = 0;
break;
}
Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/CommonDS.h
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/src/CommonDS.h 2009-08-25 17:48:32 UTC (rev 43)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/src/CommonDS.h 2009-09-10 18:56:25 UTC (rev 44)
@@ -53,6 +53,7 @@
#include "TWAINContainer.h"
#include "TWAINContainerInt.h"
#include "TWAINContainerFix32.h"
+#include "TWAINContainerBool.h"
#include "TWAINContainerFrame.h"
#include "CTiffWriter.h"
Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.cpp
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.cpp 2009-08-25 17:48:32 UTC (rev 43)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/src/DSMInterface.cpp 2009-09-10 18:56:25 UTC (rev 44)
@@ -99,8 +99,30 @@
// This should only happen if not being called by the DSM2
// Other words only on Windows with an older DSM
// So we load the old dll
- if((0 == gpDSM) && !LoadDSMLib("TWAIN_32.dll"))
+ char DSMName[MAX_PATH];
+
+ memset(DSMName, 0, MAX_PATH*sizeof(char));
+
+ if(GetWindowsDirectory (DSMName, MAX_PATH)==0)
{
+ DSMName[0]=0;
+ }
+#if (TWNDS_CMP_VERSION >= 1400)
+ if (DSMName[strlen(DSMName)-1] != '\\')
+ {
+ strcat_s(DSMName,MAX_PATH, "\\");
+ }
+ strcat_s (DSMName,MAX_PATH, "TWAIN_32.dll");
+#else
+ if (DSMName[strlen(DSMName)-1] != '\\')
+ {
+ strcat(DSMName, "\\");
+ }
+ strcat(DSMName, "TWAIN_32.dll");
+#endif
+
+ if((0 == gpDSM) && !LoadDSMLib(DSMName))
+ {
cerr << "Could not load the DSM" << endl;
return TWRC_FAILURE;
}
Added: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerBool.cpp
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerBool.cpp (rev 0)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerBool.cpp 2009-09-10 18:56:25 UTC (rev 44)
@@ -0,0 +1,319 @@
+/***************************************************************************
+* Copyright \xA9 2007 TWAIN Working Group:
+* Adobe Systems Incorporated, AnyDoc Software Inc., Eastman Kodak Company,
+* Fujitsu Computer Products of America, JFL Peripheral Solutions Inc.,
+* Ricoh Corporation, and Xerox Corporation.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the distribution.
+* * Neither the name of the TWAIN Working Group nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY TWAIN Working Group ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL TWAIN Working Group BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+***************************************************************************/
+
+/**
+* @file TWAINContainerBool.cpp
+* bool Container class for negotiating capabilities.
+* @author TWAIN Working Group
+* @date April 2007
+*/
+
+#include "CommonDS.h"
+#include <algorithm>
+
+CTWAINContainerBool::CTWAINContainerBool(const TW_UINT16 _unCapID,
+ const bool _bAPP2,
+ const TW_INT32 _nSupportedQueries /*=TWQC_ALL*/)
+ : CTWAINContainer(_unCapID, TWTY_BOOL, _bAPP2?TWON_ENUMERATION:TWON_ONEVALUE, _nSupportedQueries)
+{
+}
+
+CTWAINContainerBool::~CTWAINContainerBool()
+{
+}
+
+TW_HANDLE CTWAINContainerBool::GetContainer(const TW_UINT16 _unMsg)
+{
+ TW_HANDLE hContainer = 0;
+
+ if((TWON_ONEVALUE == m_unGetType) ||
+ (MSG_GETCURRENT == _unMsg) ||
+ (MSG_GETDEFAULT == _unMsg))
+ {
+ hContainer = _DSM_Alloc(sizeof(TW_ONEVALUE));
+
+ if(0 != hContainer)
+ {
+ TW_ONEVALUE* pCap = (TW_ONEVALUE*)_DSM_LockMemory(hContainer);
+
+ pCap->ItemType = TWTY_BOOL;
+ // If the Cap has been constrained the default may only be in the m_listBoolsDefault.
+ const bool bVal = ((MSG_GETDEFAULT == _unMsg)?m_listBoolsDefault[m_nDefault]:m_listBools[m_nCurrent])!=0;
+
+ pCap->Item = bVal?1:0;
+ _DSM_UnlockMemory(hContainer);
+ }
+ }
+ else if(MSG_GET == _unMsg)
+ {
+ hContainer = _DSM_Alloc((TW_UINT32)(sizeof(TW_ENUMERATION)-1 + (sizeof(TW_BOOL) * (m_listBools.size())))); // -1 because already contains 1 byte
+
+ if(0 != hContainer)
+ {
+ TW_ENUMERATION* pCap = (TW_ENUMERATION*)_DSM_LockMemory(hContainer);
+
+ pCap->ItemType = TWTY_BOOL;
+ pCap->NumItems = (TW_UINT32)m_listBools.size();
+ pCap->CurrentIndex = m_nCurrent;
+ //If the CAP has been constrained m_nDefault index might not point
+ // to the correct index and the index may not be valid. We need to
+ // find the value in the default list and see if we can find a match
+ // in the current list. If no match found then set to first index.
+ // see spec on twain.org Chap4 p73 Advanced Application Implementation |
+ // Capabilities | Constrained Capabilities and Message Responses | MSG_SET
+ const bool bVal = m_listBoolsDefault[m_nDefault]!=0;
+ int nIndex = getIndexForValue(bVal);
+ if(nIndex != -1)
+ {
+ pCap->DefaultIndex = nIndex;
+ }
+ else
+ {
+ // We use the first index. We could try transversing through the
+ // list and finding the closest match in value. But either way
+ // the application should not be using this value.
+ pCap->DefaultIndex = 0;
+ }
+
+ for(TW_UINT32 x = 0; x < pCap->NumItems; ++x)
+ {
+ ((TW_BOOL*)pCap->ItemList)[x] = m_listBools[x]?1:0;
+ }
+
+ _DSM_UnlockMemory(hContainer);
+ }
+ }
+
+ return hContainer;
+}
+
+bool CTWAINContainerBool::isValidType(const TW_UINT16 _unTWType)
+{
+ return (TWTY_BOOL == _unTWType);
+}
+
+TW_INT16 CTWAINContainerBool::Set(pTW_CAPABILITY _pCap, TW_INT16 &Condition)
+{
+ TW_INT16 twrc = TWRC_SUCCESS;
+ Condition = TWCC_SUCCESS;
+
+ if(TWON_ONEVALUE == _pCap->ConType)
+ {
+ TW_ONEVALUE* pCap = (TW_ONEVALUE*)_DSM_LockMemory(_pCap->hContainer);
+
+ if(isValidType(pCap->ItemType))
+ {
+ if(!SetCurrent((pCap->Item&0xFFFF)!=0))
+ {
+ twrc = TWRC_FAILURE;
+ Condition = TWCC_BADVALUE;
+ }
+ }
+
+ _DSM_UnlockMemory(_pCap->hContainer);
+ }
+ else if(TWON_ENUMERATION == _pCap->ConType)
+ {
+ TW_ENUMERATION* pCap = (TW_ENUMERATION*)_DSM_LockMemory(_pCap->hContainer);
+
+ if(isValidType(pCap->ItemType))
+ {
+ int nNewCurrentIndex = pCap->CurrentIndex;
+ IntVector::iterator iter;
+ bool bListCleared = false; // We only want to crear the current list if we are passed
+ // valid data, and only clear it once through the loop of testing
+ bool bVal;
+
+ for(TW_UINT32 x = 0; x < pCap->NumItems; ++x)
+ {
+ bVal = ((TW_BOOL*)pCap->ItemList)[x]!=0;
+
+ // only set the value if it exists in m_listBoolsDefault
+ iter = find(m_listBoolsDefault.begin(), m_listBoolsDefault.end(), (bVal?1:0));
+
+ if(iter != m_listBoolsDefault.end())
+ {
+ // We have valid data
+ if(!bListCleared)
+ {
+ // only clear the list if we have not done so already
+ m_listBools.clear();
+ bListCleared = true;
+ }
+
+ // only add it if it was not added already
+ iter = find(m_listBools.begin(), m_listBools.end(), (bVal?1:0));
+ if(iter == m_listBools.end())
+ {
+ m_listBools.push_back(bVal);
+ }
+ else
+ {
+ if(x < pCap->CurrentIndex)
+ {
+ nNewCurrentIndex--;
+ }
+ twrc = TWRC_CHECKSTATUS;
+ Condition = TWCC_BADVALUE;
+ }
+ }
+ else
+ {
+ // if the index is below the current then we need to adjust what is going to be current
+ if(x < pCap->CurrentIndex)
+ {
+ nNewCurrentIndex--;
+ }
+
+ twrc = TWRC_CHECKSTATUS;
+ Condition = TWCC_BADVALUE;
+ }
+ }
+
+ // If the list has been cleared then there was at at least some valid data
+ if(bListCleared)
+ {
+ if(nNewCurrentIndex >= 0 && nNewCurrentIndex < (int)(m_listBools.size()))
+ {
+ m_nCurrent = nNewCurrentIndex;
+ }
+ else
+ {
+ // the new current index is not in range
+ m_nCurrent = 0;
+ twrc = TWRC_CHECKSTATUS;
+ Condition = TWCC_BADVALUE;
+ }
+ }
+ else
+ {
+ twrc = TWRC_FAILURE;
+ Condition = TWCC_BADVALUE;
+ }
+ }
+ else // NOT isValidType(pCap->ItemType))
+ {
+ twrc = TWRC_FAILURE;
+ Condition = TWCC_BADVALUE;
+ }
+
+ _DSM_UnlockMemory(_pCap->hContainer);
+ }
+ else //bad container type
+ {
+ twrc = TWRC_FAILURE;
+ Condition = TWCC_BADVALUE;
+ }
+ return twrc;
+}
+
+bool CTWAINContainerBool::Reset()
+{
+ m_listBools.clear();
+
+ const int nSize = (int)(m_listBoolsDefault.size());
+
+ for(int x = 0; x < nSize; ++x)
+ {
+ m_listBools.push_back(m_listBoolsDefault[x]);
+ }
+
+ m_nCurrent = m_nDefault;
+
+ return true;
+}
+
+bool CTWAINContainerBool::GetCurrent(bool &_bVal)
+{
+ if((m_nCurrent >= 0) && ((int)(m_listBools.size()) > m_nCurrent))
+ {
+ _bVal = m_listBools[m_nCurrent]!=0;
+ return true;
+ }
+
+ return false;
+}
+
+bool CTWAINContainerBool::GetDefault(bool &_bVal)
+{
+ if((m_nDefault >= 0) && ((int)(m_listBoolsDefault.size()) > m_nDefault))
+ {
+ _bVal = m_listBoolsDefault[m_nDefault]!=0;
+ return true;
+ }
+
+ return false;
+}
+
+const IntVector &CTWAINContainerBool::GetSupported()
+{
+ return m_listBools;
+}
+
+bool CTWAINContainerBool::Add(const bool _bAdd, bool _bDefault /*= false*/)
+{
+ m_listBools.push_back(_bAdd);
+ m_listBoolsDefault.push_back(_bAdd);
+ if(m_nDefault == -1 || _bDefault)
+ {
+ m_nCurrent = (int)m_listBools.size()-1;
+ m_nDefault = (int)m_listBoolsDefault.size()-1;
+ }
+ return true;
+}
+
+bool CTWAINContainerBool::SetCurrent(bool _bCurr)
+{
+ int nIdx = getIndexForValue(_bCurr);
+ if(nIdx < 0)
+ {
+ return false;
+ }
+
+ m_nCurrent = nIdx;
+ return true;
+}
+
+int CTWAINContainerBool::getIndexForValue(const bool _bVal)
+{
+ const int nSize = (int)(m_listBools.size());
+
+ for(int x = 0; x < nSize; ++x)
+ {
+ if(_bVal == (m_listBools[x]!=0))
+ {
+ return x;
+ }
+ }
+
+ return -1;
+}
+
Added: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerBool.h
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerBool.h (rev 0)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerBool.h 2009-09-10 18:56:25 UTC (rev 44)
@@ -0,0 +1,131 @@
+/***************************************************************************
+* Copyright \xA9 2007 TWAIN Working Group:
+* Adobe Systems Incorporated, AnyDoc Software Inc., Eastman Kodak Company,
+* Fujitsu Computer Products of America, JFL Peripheral Solutions Inc.,
+* Ricoh Corporation, and Xerox Corporation.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the distribution.
+* * Neither the name of the TWAIN Working Group nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY TWAIN Working Group ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL TWAIN Working Group BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+***************************************************************************/
+
+/**
+* @file TWAINContainerBool.h
+* Fix32 Container class for negotiating capabilities.
+* @author TWAIN Working Group
+* @date April 2007
+*/
+
+
+#ifndef __CTWAINCONTAINERBOOL_H__
+#define __CTWAINCONTAINERBOOL_H__
+
+#include "TWAINContainer.h"
+
+/**
+* This class can be used for any Bool based TWAIN container.
+*/
+class CTWAINContainerBool : public CTWAINContainer
+{
+public:
+ /**
+ * Constructor.
+ * @param[in] _unCapID Capability ID
+ * @param[in] _unItemType TWAIN Type TWTY_xxxx being stored.
+ * @param[in] _unGetType TWON_xxxx container
+ * @param[in] _nSupportedQueries the supported querie types TWQC_xxxx
+ */
+ CTWAINContainerBool(const TW_UINT16 _unCapID,
+ const bool _bAPP2,
+ const TW_INT32 _nSupportedQueries = TWQC_ALL);
+ virtual ~CTWAINContainerBool();
+
+ virtual TW_HANDLE GetContainer(const TW_UINT16 _unMsg);
+ virtual TW_INT16 Set(pTW_CAPABILITY _pCap, TW_INT16 &Condition);
+ virtual bool Reset();
+
+ // For float vals
+ /**
+ * Try to add a value for container. The first value added to a capabiltiy is set as the default and current value.
+ * @param[in] _flAdd the value to be added.
+ * @param[in] _bDefault if true explisitly sets this value to be the default and current.
+ * @return true if success.
+ */
+ bool Add(const bool _blAdd, bool _bDefault = false);
+
+ /**
+ * Try to set the current value for container.
+ * The value must already be part of the container.
+ * @param[in] _flAdd the value to be set as current.
+ * @return true if success.
+ */
+ bool SetCurrent(bool _blCurr);
+
+ /**
+ * Return the default value through _flVal if set.
+ * @param[out] _flVal set the default value on return.
+ * @return true if success.
+ */
+ bool GetDefault(bool &_blVal);
+
+ /**
+ * Return the current value through _flVal if set.
+ * @param[out] _flVal set the current value on return.
+ * @return true if success.
+ */
+ bool GetCurrent(bool &_bVal);
+
+ /**
+ * Return a vector of supported values.
+ * @return supported values.
+ */
+ const IntVector &GetSupported();
+
+ /**
+ * Return the weather or not the value is supported by this capability.
+ * @param[in] _flVal the value to check to see if it is supported
+ * @return true is the _flVal is supported.
+ */
+ bool isValueSupported(const bool _bVal) {return -1 != getIndexForValue(_bVal);}
+
+ /**
+ * Return the index in vector list for value.
+ * @param[in] _flVal value to search for.
+ * @return the index of value, or -1 if does not exist.
+ */
+ int getIndexForValue(const bool _bVal);
+
+
+protected:
+ /**
+ * Check to see if type is valid.
+ * @param[in] _unTWType type to check
+ * @return true if valid
+ */
+ bool isValidType(const TW_UINT16 _unTWType);
+
+ IntVector m_listBools; /**< vector of valid container values. */
+ IntVector m_listBoolsDefault; /**< vector of valid container default values. */
+};
+
+#endif // __CTWAINCONTAINERBOOL_H__
Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp 2009-08-25 17:48:32 UTC (rev 43)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFix32.cpp 2009-09-10 18:56:25 UTC (rev 44)
@@ -285,6 +285,11 @@
_DSM_UnlockMemory(_pCap->hContainer);
}
+ else //bad container type
+ {
+ twrc = TWRC_FAILURE;
+ Condition = TWCC_BADVALUE;
+ }
return twrc;
}
@@ -349,14 +354,14 @@
bool CTWAINContainerFix32::SetCurrent(float _flCurr)
{
- bool bret = true;
-
- if((m_nCurrent = getIndexForValue(_flCurr)) < 0)
+ int nIdx = getIndexForValue(_flCurr);
+ if(nIdx < 0)
{
- bret = false;
+ return false;
}
- return bret;
+ m_nCurrent = nIdx;
+ return true;
}
int CTWAINContainerFix32::getIndexForValue(const float _flVal)
Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp 2009-08-25 17:48:32 UTC (rev 43)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerFrame.cpp 2009-09-10 18:56:25 UTC (rev 44)
@@ -483,6 +483,11 @@
_DSM_UnlockMemory(_pCap->hContainer);
}
+ else //bad container type
+ {
+ twrc = TWRC_FAILURE;
+ Condition = TWCC_BADVALUE;
+ }
return twrc;
}
@@ -586,14 +591,14 @@
bool CTWAINContainerFrame::SetCurrent(const InternalFrame& _frame)
{
- bool bret = true;
-
- if((m_nCurrent = getIndexForValue(_frame)) < 0)
+ int nIdx = getIndexForValue(_frame);
+ if(nIdx < 0)
{
- bret = false;
+ return false;
}
- return bret;
+ m_nCurrent = nIdx;
+ return true;
}
int CTWAINContainerFrame::getIndexForValue(const InternalFrame& _frame)
Modified: trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2009-08-25 17:48:32 UTC (rev 43)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/src/TWAINContainerInt.cpp 2009-09-10 18:56:25 UTC (rev 44)
@@ -80,7 +80,7 @@
if(TWON_ENUMERATION == m_unGetType)
{
- hContainer = _DSM_Alloc(sizeof(TW_ENUMERATION) + (unSize * m_listInts.size()));
+ hContainer = _DSM_Alloc(sizeof(TW_ENUMERATION) -1 + (unSize * m_listInts.size()));
if(0 != hContainer)
{
@@ -116,7 +116,7 @@
}
else if(TWON_ARRAY == m_unGetType)
{
- hContainer = _DSM_Alloc(sizeof(TW_ARRAY) + (unSize * m_listInts.size()));
+ hContainer = _DSM_Alloc(sizeof(TW_ARRAY)-1 + (unSize * m_listInts.size()));
if(0 != hContainer)
{
@@ -366,6 +366,11 @@
_DSM_UnlockMemory(_pCap->hContainer);
}
+ else //bad container type
+ {
+ twrc = TWRC_FAILURE;
+ Condition = TWCC_BADVALUE;
+ }
return twrc;
}
@@ -441,14 +446,14 @@
bool CTWAINContainerInt::SetCurrent(int _nCurr)
{
- bool bret = true;
-
- if((m_nCurrent = getIndexForValue(_nCurr)) < 0)
+ int nIdx = getIndexForValue(_nCurr);
+ if(nIdx < 0)
{
- bret = false;
+ return false;
}
- return bret;
+ m_nCurrent = nIdx;
+ return true;
}
int CTWAINContainerInt::getIndexForValue(const int _nVal)
Modified: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2003.vcproj
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2003.vcproj 2009-08-25 17:48:32 UTC (rev 43)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2003.vcproj 2009-09-10 18:56:25 UTC (rev 44)
@@ -51,7 +51,8 @@
Name="VCPostBuildEventTool"
Description="Copy Application to pub\bin directory"
CommandLine="copy "$(TargetPath)" "$(ProjectDir)\..\pub\bin"
-copy "$(ProjectDir)\..\..\pub\external\bin\FreeImage.dll" "$(ProjectDir)\..\pub\bin""/>
+copy "$(ProjectDir)\..\..\pub\external\bin\FreeImage.dll" "$(ProjectDir)\..\pub\bin"
+"/>
<Tool
Name="VCPreBuildEventTool"
Description="create pub folders if do not exist"
@@ -106,7 +107,8 @@
Name="VCPostBuildEventTool"
Description="Copy Application to pub\bin directory"
CommandLine="copy "$(TargetPath)" "$(ProjectDir)\..\pub\bin"
-copy "$(ProjectDir)\..\..\pub\external\bin\FreeImage.dll" "$(ProjectDir)\..\pub\bin""/>
+copy "$(ProjectDir)\..\..\pub\external\bin\FreeImage.dll" "$(ProjectDir)\..\pub\bin"
+"/>
<Tool
Name="VCPreBuildEventTool"
Description="create pub folders if do not exist"
@@ -162,6 +164,9 @@
RelativePath="..\src\TWAINContainer.cpp">
</File>
<File
+ RelativePath="..\src\TWAINContainerBool.cpp">
+ </File>
+ <File
RelativePath="..\src\TWAINContainerFix32.cpp">
</File>
<File
@@ -209,6 +214,9 @@
RelativePath="..\src\TWAINContainer.h">
</File>
<File
+ RelativePath="..\src\TWAINContainerBool.h">
+ </File>
+ <File
RelativePath="..\src\TWAINContainerFix32.h">
</File>
<File
Modified: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.vcproj
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.vcproj 2009-08-25 17:48:32 UTC (rev 43)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2005.vcproj 2009-09-10 18:56:25 UTC (rev 44)
@@ -111,17 +111,17 @@
/>
</Configuration>
<Configuration
- Name="Debug|x64"
- OutputDirectory="$(ConfigurationName)64"
- IntermediateDirectory="$(ConfigurationName)64"
+ Name="Release|Win32"
+ OutputDirectory="$(ConfigurationName)32"
+ IntermediateDirectory="$(ConfigurationName)32"
ConfigurationType="2"
- UseOfMFC="2"
+ UseOfMFC="1"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
Description="create pub folders if do not exist"
- CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin"
if NOT EXIST c:\windows\twain_64\sample2 mkdir c:\windows\twain_64\sample2
"
+ CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin""
/>
<Tool
Name="VCCustomBuildTool"
@@ -134,22 +134,15 @@
/>
<Tool
Name="VCMIDLTool"
- TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalOptions="/GR"
- Optimization="0"
AdditionalIncludeDirectories=".;..;..\..\pub\external\include\;..\..\Common"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;STRICT;_USRDLL"
- MinimalRebuild="true"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;STRICT;_USRDLL"
+ RuntimeLibrary="0"
UsePrecompiledHeader="0"
- BrowseInformation="1"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -162,15 +155,16 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="FreeImagedx64.lib"
- OutputFile="$(OutDir)\$(ProjectName)64.ds"
- LinkIncremental="2"
+ AdditionalDependencies="FreeImage.lib"
+ OutputFile="$(OutDir)\$(ProjectName)32.ds"
+ LinkIncremental="1"
AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib"
ModuleDefinitionFile="..\src\TWAINDS.def"
GenerateDebugInformation="true"
- ProgramDatabaseFile="$(OutDir)/TWAINDS_Sample01.pdb"
SubSystem="2"
- TargetMachine="17"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
@@ -195,22 +189,22 @@
/>
<Tool
Name="VCPostBuildEventTool"
- Description="Copy datasource to windows\twain_64\sample2 dir"
- CommandLine="copy "$(TargetPath)" c:\windows\twain_64\sample2
copy "$(ProjectDir)\..\..\pub\external\bin\FreeImagedx64.dll" c:\windows\twain_64\sample2
copy "$(ProjectDir)\..\..\pub\bin\TWAIN_logo.png" c:\windows\twain_64\sample2
"
+ Description="Copy Data Source to pub\bin directory"
+ CommandLine="copy "$(TargetPath)" "$(ProjectDir)\..\pub\bin"
copy "$(ProjectDir)\..\..\pub\external\bin\FreeImage.dll" "$(ProjectDir)\..\pub\bin"
"
/>
</Configuration>
<Configuration
- Name="Release|Win32"
- OutputDirectory="$(ConfigurationName)32"
- IntermediateDirectory="$(ConfigurationName)32"
+ Name="Debug|x64"
+ OutputDirectory="$(ConfigurationName)64"
+ IntermediateDirectory="$(ConfigurationName)64"
ConfigurationType="2"
- UseOfMFC="1"
+ UseOfMFC="2"
CharacterSet="2"
>
<Tool
Name="VCPreBuildEventTool"
Description="create pub folders if do not exist"
- CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin""
+ CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin"
if NOT EXIST c:\windows\twain_64\sample2 mkdir c:\windows\twain_64\sample2
"
/>
<Tool
Name="VCCustomBuildTool"
@@ -223,15 +217,22 @@
/>
<Tool
Name="VCMIDLTool"
+ TargetEnvironment="3"
/>
<Tool
Name="VCCLCompilerTool"
+ AdditionalOptions="/GR"
+ Optimization="0"
AdditionalIncludeDirectories=".;..;..\..\pub\external\include\;..\..\Common"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;STRICT;_USRDLL"
- RuntimeLibrary="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;STRICT;_USRDLL"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
UsePrecompiledHeader="0"
+ BrowseInformation="1"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -244,16 +245,15 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="FreeImage.lib"
- OutputFile="$(OutDir)\$(ProjectName)32.ds"
- LinkIncremental="1"
+ AdditionalDependencies="FreeImagedx64.lib"
+ OutputFile="$(OutDir)\$(ProjectName)64.ds"
+ LinkIncremental="2"
AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib"
ModuleDefinitionFile="..\src\TWAINDS.def"
GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/TWAINDS_Sample01.pdb"
SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
+ TargetMachine="17"
/>
<Tool
Name="VCALinkTool"
@@ -278,8 +278,8 @@
/>
<Tool
Name="VCPostBuildEventTool"
- Description="Copy Data Source to pub\bin directory"
- CommandLine="copy "$(TargetPath)" "$(ProjectDir)\..\pub\bin"
copy "$(ProjectDir)\..\..\pub\external\bin\FreeImage.dll" "$(ProjectDir)\..\pub\bin"
"
+ Description="Copy datasource to windows\twain_64\sample2 dir"
+ CommandLine="copy "$(TargetPath)" c:\windows\twain_64\sample2
copy "$(ProjectDir)\..\..\pub\external\bin\FreeImagedx64.dll" c:\windows\twain_64\sample2
copy "$(ProjectDir)\..\..\pub\bin\TWAIN_logo.png" c:\windows\twain_64\sample2
"
/>
</Configuration>
<Configuration
@@ -412,6 +412,10 @@
>
</File>
<File
+ RelativePath="..\src\TWAINContainerBool.cpp"
+ >
+ </File>
+ <File
RelativePath="..\src\TWAINContainerFix32.cpp"
>
</File>
@@ -474,6 +478,10 @@
>
</File>
<File
+ RelativePath="..\src\TWAINContainerBool.h"
+ >
+ </File>
+ <File
RelativePath="..\src\TWAINContainerFix32.h"
>
</File>
Added: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2008.sln
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2008.sln (rev 0)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2008.sln 2009-09-10 18:56:25 UTC (rev 44)
@@ -0,0 +1,26 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TWAINDS_Sample", "TWAINDS_VS2008.vcproj", "{1E73CADF-90D9-45E9-97E2-CD25E3532DB4}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1E73CADF-90D9-45E9-97E2-CD25E3532DB4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {1E73CADF-90D9-45E9-97E2-CD25E3532DB4}.Debug|Win32.Build.0 = Debug|Win32
+ {1E73CADF-90D9-45E9-97E2-CD25E3532DB4}.Debug|x64.ActiveCfg = Debug|x64
+ {1E73CADF-90D9-45E9-97E2-CD25E3532DB4}.Debug|x64.Build.0 = Debug|x64
+ {1E73CADF-90D9-45E9-97E2-CD25E3532DB4}.Release|Win32.ActiveCfg = Release|Win32
+ {1E73CADF-90D9-45E9-97E2-CD25E3532DB4}.Release|Win32.Build.0 = Release|Win32
+ {1E73CADF-90D9-45E9-97E2-CD25E3532DB4}.Release|x64.ActiveCfg = Release|x64
+ {1E73CADF-90D9-45E9-97E2-CD25E3532DB4}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Added: trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2008.vcproj
===================================================================
--- trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2008.vcproj (rev 0)
+++ trunk/TWAIN-Samples/Twain_DS_sample01/visual_studio/TWAINDS_VS2008.vcproj 2009-09-10 18:56:25 UTC (rev 44)
@@ -0,0 +1,503 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="TWAINDS_Sample"
+ ProjectGUID="{1E73CADF-90D9-45E9-97E2-CD25E3532DB4}"
+ RootNamespace="TWAINDS_VS2005_mfc32"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="0"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(ConfigurationName)32"
+ IntermediateDirectory="$(ConfigurationName)32"
+ ConfigurationType="2"
+ UseOfMFC="2"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="create pub folders if do not exist"
+ CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin"
if NOT EXIST c:\windows\twain_32\sample2 mkdir c:\windows\twain_32\sample2
"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/GR"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;..;..\..\pub\external\include\;..\..\Common"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;STRICT;_USRDLL"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ BrowseInformation="1"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="FreeImage.lib"
+ OutputFile="$(OutDir)\$(ProjectName)32.ds"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib"
+ ModuleDefinitionFile="..\src\TWAINDS.def"
+ DelayLoadDLLs=""
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/TWAINDS_Sample01.pdb"
+ SubSystem="2"
+ BaseAddress=""
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ EmbedManifest="true"
+ VerboseOutput="false"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copy Data Source to windows\twain_32\sample2 dir"
+ CommandLine="copy "$(TargetPath)" c:\windows\twain_32\sample2
copy "$(ProjectDir)\..\..\pub\external\bin\FreeImage.dll" c:\windows\twain_32\sample2
copy "$(ProjectDir)\..\..\pub\bin\TWAIN_logo.png" c:\windows\twain_32\sample2
"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(ConfigurationName)64"
+ IntermediateDirectory="$(ConfigurationName)64"
+ ConfigurationType="2"
+ UseOfMFC="2"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="create pub folders if do not exist"
+ CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin"
if NOT EXIST c:\windows\twain_64\sample2 mkdir c:\windows\twain_64\sample2
"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/GR"
+ Optimization="0"
+ AdditionalIncludeDirectories=".;..;..\..\pub\external\include\;..\..\Common"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;STRICT;_USRDLL"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ BrowseInformation="1"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="FreeImagedx64.lib"
+ OutputFile="$(OutDir)\$(ProjectName)64.ds"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib"
+ ModuleDefinitionFile="..\src\TWAINDS.def"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/TWAINDS_Sample01.pdb"
+ SubSystem="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copy datasource to windows\twain_64\sample2 dir"
+ CommandLine="copy "$(TargetPath)" c:\windows\twain_64\sample2
copy "$(ProjectDir)\..\..\pub\external\bin\FreeImagedx64.dll" c:\windows\twain_64\sample2
copy "$(ProjectDir)\..\..\pub\bin\TWAIN_logo.png" c:\windows\twain_64\sample2
"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(ConfigurationName)32"
+ IntermediateDirectory="$(ConfigurationName)32"
+ ConfigurationType="2"
+ UseOfMFC="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="create pub folders if do not exist"
+ CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;..;..\..\pub\external\include\;..\..\Common"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;STRICT;_USRDLL"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="FreeImage.lib"
+ OutputFile="$(OutDir)\$(ProjectName)32.ds"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib"
+ ModuleDefinitionFile="..\src\TWAINDS.def"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copy Data Source to pub\bin directory"
+ CommandLine="copy "$(TargetPath)" "$(ProjectDir)\..\pub\bin"
copy "$(ProjectDir)\..\..\pub\external\bin\FreeImage.dll" "$(ProjectDir)\..\pub\bin"
"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(ConfigurationName)64"
+ IntermediateDirectory="$(ConfigurationName)64"
+ ConfigurationType="2"
+ UseOfMFC="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ Description="create pub folders if do not exist"
+ CommandLine="if NOT EXIST "$(ProjectDir)\..\pub\bin" mkdir "$(ProjectDir)\..\pub\bin""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=".;..;..\..\pub\external\include\;..\..\Common"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;STRICT;_USRDLL"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="FreeImagex64.lib"
+ OutputFile="$(OutDir)\$(ProjectName)64.ds"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="..\..\pub\external\lib;..\..\pub\lib"
+ ModuleDefinitionFile="..\src\TWAINDS.def"
+ GenerateDebugInformation="true"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="Copy Application to pub\bin directory"
+ CommandLine="copy "$(TargetPath)" "$(ProjectDir)\..\pub\bin"
copy "$(ProjectDir)\..\..\pub\external\bin\FreeImagex64.dll" "$(ProjectDir)\..\pub\bin"
"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\src\CommonDS.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\CommonTWAIN.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\CScanner_FreeImage.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\CTiffWriter.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\CTWAINDS_Base.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\CTWAINDS_FreeImage.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\CTWAINDS_Sample1.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\DSMInterface.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\TWAINContainer.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\TWAINContainerBool.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\TWAINContainerFix32.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\TWAINContainerFrame.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\src\TWAINContainerInt.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\common\Common.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\CommonDS.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\CommonTWAIN.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\CScanner_FreeImage.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\common\CTiffWriter.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\CTWAINDS_Base.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\CTWAINDS_FreeImage.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\CTWAINDS_Sample1.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\DSMInterface.h"
+ >
+ </File>
+ <File
+ RelativePath=".\resource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\TWAINContainer.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\TWAINContainerBool.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\TWAINContainerFix32.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\TWAINContainerFrame.h"
+ >
+ </File>
+ <File
+ RelativePath="..\src\TWAINContainerInt.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ <File
+ RelativePath=".\TWAINDS_GUI.rc"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ <Global
+ Name="RESOURCE_FILE"
+ Value="TWAINDS_GUI.rc"
+ />
+ </Globals>
+</VisualStudioProject>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|