0

链接: http: //www.codeproject.com/KB/dotnet/twaindotnet.aspx

我正在尝试为 TWAIN 的这个开源 .NET 实现创建一个包装类,但我无法理解它实际上是如何获取图像的。

我已经下载了源代码,在 GUI 中有一个名为 Acquire 的按钮。当我单击此按钮转到它的事件处理程序时,我找到了我假设获取图像的这段代码:

private void menuItemScan_Click(object sender, System.EventArgs e)
{
    if (!msgfilter)
    {
        this.Enabled = false;
        msgfilter = true;
        Application.AddMessageFilter(this);
    }
    tw.Acquire();
}

如果我按照 Acquire() 方法查看它的内容,我会看到:

public void Acquire()
{
    TwRC rc;
    CloseSrc();
    if (appid.Id == IntPtr.Zero)
    {
        Init(hwnd);
        if (appid.Id == IntPtr.Zero)
            return;
    }
    rc = DSMident(appid, IntPtr.Zero, TwDG.Control, TwDAT.Identity, TwMSG.OpenDS, srcds);
    if (rc != TwRC.Success)
        return;

    TwCapability cap = new TwCapability(TwCap.XferCount, 1);
    rc = DScap(appid, srcds, TwDG.Control, TwDAT.Capability, TwMSG.Set, cap);
    if (rc != TwRC.Success)
    {
        CloseSrc();
        return;
    }

    TwUserInterface guif = new TwUserInterface();
    guif.ShowUI = 1;
    guif.ModalUI = 1;
    guif.ParentHand = hwnd;
    rc = DSuserif(appid, srcds, TwDG.Control, TwDAT.UserInterface, TwMSG.EnableDS, guif);
    if (rc != TwRC.Success)
    {
        CloseSrc();
        return;
    }
}

我不明白的是,具有“void”返回类型的方法实际上如何具有 return 语句。另外,它在哪里获取和返回图像?

任何人都可以帮忙吗?

我正在尝试创建一个有用的包装器并将其开源,因为就目前而言,在 C# 中扫描图像没有简单的拖放解决方案。

谢谢您的帮助!

编辑:感谢有关提前退货的帮助。直到!现在我很好奇应用程序如何让图像显示在表单上。

有什么指导吗?

4

4 回答 4

3

“无效”意味着它什么都不返回,而不是它不返回。所以return语句只是终止函数并返回给调用者

对于您的其他问题,还有一些其他相关的堆栈溢出问题

DSCap 线查看是否有多个图像。捕获作为对 DSuserif 的调用的一部分发生

于 2010-12-02T13:11:03.457 回答
1

事实上,您可以通过调用Application.AddMessageFilter(this)方法在表单上设置消息过滤器。因此,您必须监听扫描仪事件,当您收到TwainCommand.TransferReady事件时,您将调用TransferPictures()以获取图像集合。

于 2012-04-14T06:59:03.050 回答
0

该方法仅返回 void 以避免执行其他代码段。这是完全合法的。该方法不是获取图像,它只准备获取图像的硬件和 UI,我会说。

于 2010-12-02T13:12:24.930 回答
0

return;导致控制流退出函数。

看了看图书馆。似乎这Acquire()只是导致驱动程序执行获取,并被TransferPictures()调用来检索图片(那个返回一个ArrayList,所以是的,它正在返回一些东西)。

于 2010-12-02T13:18:52.500 回答