2013-05-15 57 views
0

在C#中使用twaindotnet庫,我想知道是否有方法使用庫設置默認數據源。在不使用API​​ UI菜單的情況下設置默認TWAIN數據源

作爲一個軟弱的嘗試,我嘗試添加一個SetDefault方法將DataSourcetwaindonet,這樣

public static void SetDefault(Identity applicationId, IWindowsMessageHook messageHook, DataSource newDataSource) 
    { 
     var defaultSourceId = newDataSource.SourceId; 

     // Attempt to get information about the system default source 
     var result = Twain32Native.DsmIdentity(
      applicationId, 
      IntPtr.Zero, 
      DataGroup.Control, 
      DataArgumentType.Identity, 
      Message.Set, 
      defaultSourceId); 

     if (result != TwainResult.Success) 
     { 
      var status = DataSourceManager.GetConditionCode(applicationId, null); 
      throw new TwainException("Error getting information about the default source: " + result, result, status); 
     } 
    } 

其從DataSourceManage類這樣調用

public void SelectSource(DataSource dataSource) 
    { 
     DataSource.Dispose(); 
     DataSource.SetDefault(ApplicationId, _messageHook, dataSource); 
    } 

但當我嘗試使用SetDefault時,Twain32Native.DsmIdentity總是導致返回Failure

我基本上從SetDefaultsetDefaultDataSource方法複製從TWAIN sample Data Source and Application

pTW_IDENTITY TwainApp::setDefaultDataSource(unsigned int _index) 
{ 
if(m_DSMState < 3) 
{ 
    cout << "You need to open the DSM first." << endl; 
    return NULL; 
} 

else if(m_DSMState > 3) 
{ 
    PrintCMDMessage("A source has already been opened, please close it first\n"); 
    return NULL; 
} 

if(_index >= 0 && _index < m_DataSources.size()) 
{ 
    m_pDataSource = &(m_DataSources[_index]); 

    // set the specific data source 
    TW_UINT16 twrc; 
    twrc = _DSM_Entry(
     &m_MyInfo, 
     0, 
     DG_CONTROL, 
     DAT_IDENTITY, 
     MSG_SET, 
     (TW_MEMREF) m_pDataSource); 

    switch (twrc) 
    { 
    case TWRC_SUCCESS: 
     break; 

    case TWRC_FAILURE: 
     printError(0, "Failed to get the data source info!"); 
     break; 
    } 
} 
else 
{ 
    return NULL; 
} 

return m_pDataSource; 
} 

任何幫助,將不勝感激。

回答

1

可能的原因是您的TWAIN DSM版本太低。只有DSM 2.0或更高版本支持設置默認TWAIN數據源。

相關問題