Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net TwainDotNet System.TypeInitializationException错误_Vb.net - Fatal编程技术网

Vb.net TwainDotNet System.TypeInitializationException错误

Vb.net TwainDotNet System.TypeInitializationException错误,vb.net,Vb.net,我正在尝试将TWAIN支持添加到我已经编写了一段时间的程序中。我正在使用来自的TwainDotNet 我已经能够使vb.net示例适应新的测试项目,而不会出现问题。然而,当我把它放到我当前项目的表单中时,我得到了一个错误 代码: 错误: 'Program.vshost.exe' (CLR v4.0.30319: Program.vshost.exe): Loaded 'D:\Programming\Program\Program\bin\x86\Debug\TwainDotNet.dll'. S

我正在尝试将TWAIN支持添加到我已经编写了一段时间的程序中。我正在使用来自的TwainDotNet

我已经能够使vb.net示例适应新的测试项目,而不会出现问题。然而,当我把它放到我当前项目的表单中时,我得到了一个错误

代码:

错误:

'Program.vshost.exe' (CLR v4.0.30319: Program.vshost.exe): Loaded 'D:\Programming\Program\Program\bin\x86\Debug\TwainDotNet.dll'. Symbols loaded.
'Program.vshost.exe' (CLR v4.0.30319: Program.vshost.exe): Loaded 'D:\Programming\Program\Program\bin\x86\Debug\TwainDotNet.WinFroms.dll'. Symbols loaded.
'Program.vshost.exe' (CLR v4.0.30319: Program.vshost.exe): Loaded 'D:\Programming\Program\Program\bin\x86\Debug\Program-CustomDlls.dll'. Symbols loaded.
Exception thrown: 'System.TypeInitializationException' in TwainDotNet.dll
它死亡的代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Runtime.InteropServices;
using TwainDotNet.TwainNative;
using TwainDotNet.Win32;
using System.Drawing;

namespace TwainDotNet
{
    public class Twain
    {
        DataSourceManager _dataSourceManager;

        public Twain(IWindowsMessageHook messageHook)
        {
            ScanningComplete += delegate { };
            TransferImage += delegate { };

            _dataSourceManager = new DataSourceManager(DataSourceManager.DefaultApplicationId, messageHook);
            _dataSourceManager.ScanningComplete += delegate(object sender, ScanningCompleteEventArgs args)
            {
                ScanningComplete(this, args);
            };
            _dataSourceManager.TransferImage += delegate(object sender, TransferImageEventArgs args)
            {
                TransferImage(this, args);
            };
        }

        /// <summary>
        /// Notification that the scanning has completed.
        /// </summary>
        public event EventHandler<ScanningCompleteEventArgs> ScanningComplete;

        public event EventHandler<TransferImageEventArgs> TransferImage;

        /// <summary>
        /// Starts scanning.
        /// </summary>
        public void StartScanning(ScanSettings settings)
        {
            _dataSourceManager.StartScan(settings);
        }

        /// <summary>
        /// Shows a dialog prompting the use to select the source to scan from.
        /// </summary>
        public void SelectSource()
        {
            _dataSourceManager.SelectSource();
        }

        /// <summary>
        /// Selects a source based on the product name string.
        /// </summary>
        /// <param name="sourceName">The source product name.</param>
        public void SelectSource(string sourceName)
        {
            var source = DataSource.GetSource(
                sourceName,
                _dataSourceManager.ApplicationId,
                _dataSourceManager.MessageHook);

            _dataSourceManager.SelectSource(source);
        }

        /// <summary>
        /// Gets the product name for the default source.
        /// </summary>
        public string DefaultSourceName
        {
            get
            {
                using (var source = DataSource.GetDefault(_dataSourceManager.ApplicationId, _dataSourceManager.MessageHook))
                {
                    return source.SourceId.ProductName;
                }
            }
        }

        /// <summary>
        /// Gets a list of source product names.
        /// </summary>
        public IList<string> SourceNames
        {
            get
            {
                var result = new List<string>();
                var sources = DataSource.GetAllSources(
                    _dataSourceManager.ApplicationId,
                    _dataSourceManager.MessageHook);

                foreach (var source in sources)
                {
                    result.Add(source.SourceId.ProductName);
                    source.Dispose();
                }

                return result;
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统文本;
运用系统反思;
使用System.Runtime.InteropServices;
使用TwainDotNet.twainential;
使用TwainDotNet.Win32;
使用系统图;
名称空间TwainDotNet
{
公共类吐温
{
DataSourceManager_DataSourceManager;
公共Twain(IWindowsMessageHook messageHook)
{
ScanningComplete+=委托{};
TransferImage+=委托{};
_dataSourceManager=新的dataSourceManager(dataSourceManager.DefaultApplicationId,messageHook);
_dataSourceManager.ScanningComplete+=委托(对象发送方,ScanningCompleteEventArgs参数)
{
扫描完成(本,args);
};
_dataSourceManager.TransferImage+=委托(对象发送方,TransferImageEventArgs args args)
{
TransferImage(本,args);
};
}
/// 
///扫描已完成的通知。
/// 
公共事件事件处理程序扫描完成;
公共事件事件处理程序;
/// 
///开始扫描。
/// 
公共无效开始扫描(扫描设置)
{
_dataSourceManager.StartScan(设置);
}
/// 
///显示一个对话框,提示用户选择要扫描的源。
/// 
public void SelectSource()
{
_dataSourceManager.SelectSource();
}
/// 
///根据产品名称字符串选择源。
/// 
///源产品名称。
public void SelectSource(字符串sourceName)
{
var source=DataSource.GetSource(
sourceName,
_dataSourceManager.ApplicationId,
_dataSourceManager.MessageHook);
_数据源管理器。选择源(source);
}
/// 
///获取默认源的产品名称。
/// 
公共字符串DefaultSourceName
{
得到
{
使用(var source=DataSource.GetDefault(_dataSourceManager.ApplicationId,_dataSourceManager.MessageHook))
{
返回source.SourceId.ProductName;
}
}
}
/// 
///获取源产品名称的列表。
/// 
公共IList源名称
{
得到
{
var result=新列表();
var sources=DataSource.GetAllSources(
_dataSourceManager.ApplicationId,
_dataSourceManager.MessageHook);
foreach(源中的var源)
{
结果.Add(source.SourceId.ProductName);
source.Dispose();
}
返回结果;
}
}
}
}
第21行:_dataSourceManager=newdatasourcemanager(dataSourceManager.DefaultApplicationId,messageHook)


我不知道它为什么会死,调试消息也很模糊。有什么想法吗?

问题是由于我编译的是哪种CPU类型。我获取了TwainDotNet的代码,并为x86重新编译了它。然后,我将主程序设置为针对x86编译。现在可以了

我一直在为任何CPU编译。log4net.dll是为x86编译的,TwainDotNet需要它。我还认为Twain是为x86编译的,但我无从得知


不用说,我现在正在编译x86体系结构。

TypeLoadException告诉您(可能)无法加载DataSourceManager所在的程序集。因此,请找出此类型驻留在哪个程序集中,并将其放置在您的bin dir中。
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Runtime.InteropServices;
using TwainDotNet.TwainNative;
using TwainDotNet.Win32;
using System.Drawing;

namespace TwainDotNet
{
    public class Twain
    {
        DataSourceManager _dataSourceManager;

        public Twain(IWindowsMessageHook messageHook)
        {
            ScanningComplete += delegate { };
            TransferImage += delegate { };

            _dataSourceManager = new DataSourceManager(DataSourceManager.DefaultApplicationId, messageHook);
            _dataSourceManager.ScanningComplete += delegate(object sender, ScanningCompleteEventArgs args)
            {
                ScanningComplete(this, args);
            };
            _dataSourceManager.TransferImage += delegate(object sender, TransferImageEventArgs args)
            {
                TransferImage(this, args);
            };
        }

        /// <summary>
        /// Notification that the scanning has completed.
        /// </summary>
        public event EventHandler<ScanningCompleteEventArgs> ScanningComplete;

        public event EventHandler<TransferImageEventArgs> TransferImage;

        /// <summary>
        /// Starts scanning.
        /// </summary>
        public void StartScanning(ScanSettings settings)
        {
            _dataSourceManager.StartScan(settings);
        }

        /// <summary>
        /// Shows a dialog prompting the use to select the source to scan from.
        /// </summary>
        public void SelectSource()
        {
            _dataSourceManager.SelectSource();
        }

        /// <summary>
        /// Selects a source based on the product name string.
        /// </summary>
        /// <param name="sourceName">The source product name.</param>
        public void SelectSource(string sourceName)
        {
            var source = DataSource.GetSource(
                sourceName,
                _dataSourceManager.ApplicationId,
                _dataSourceManager.MessageHook);

            _dataSourceManager.SelectSource(source);
        }

        /// <summary>
        /// Gets the product name for the default source.
        /// </summary>
        public string DefaultSourceName
        {
            get
            {
                using (var source = DataSource.GetDefault(_dataSourceManager.ApplicationId, _dataSourceManager.MessageHook))
                {
                    return source.SourceId.ProductName;
                }
            }
        }

        /// <summary>
        /// Gets a list of source product names.
        /// </summary>
        public IList<string> SourceNames
        {
            get
            {
                var result = new List<string>();
                var sources = DataSource.GetAllSources(
                    _dataSourceManager.ApplicationId,
                    _dataSourceManager.MessageHook);

                foreach (var source in sources)
                {
                    result.Add(source.SourceId.ProductName);
                    source.Dispose();
                }

                return result;
            }
        }
    }
}