تأخير عشوائي عند الطباعة إلى Dymo LabelWriter Turbo عبر Shellexecute ()

StackOverflow https://stackoverflow.com/questions/1783963

  •  21-09-2019
  •  | 
  •  

سؤال

لديّ برنامج خارجي يأخذ بعض الحجج (printLabel) والذي يسمى من طلبي باستخدام Shellexecute. يظهر PrintLabel أدناه. في بعض الأحيان ، قد يستغرق الأمر ما يصل إلى 15 إلى 20 ثانية لطباعة الملصق. يبدو أنه يزداد سوءًا بمرور الوقت. إذا تم إعادة تشغيل الكمبيوتر ، فإن الطباعة تسرع مرة أخرى ولكنها تصبح أبطأ بمرور الوقت. في بعض الأحيان يكون عشوائيًا (أي سريعًا ثم ببطء). أنا أستخدم SW_Hide لأنني لا أريد أن يرى المستخدم مربع الحوار وحدة التحكم في كل مرة. أتفهم أن الأمر يجب أن يستغرق بضع ثوان كما لو كانت الطابعة العادية ، لكن 15 - 20 ثانية تبدو مفرطة. هل هي قضية Dymo LabelWriter أو مشكلة Shellexecute؟ يتم استدعاء Shellexecute داخل موضوع واجهة المستخدم. أي أدلة؟

بيان Shellexecute من التطبيق:

ShellExecute(Application->Handle, "open", "C:\\Program Files\\Application\\PrintLabel", objdata, "C:\\Program Files\\Application", SW_HIDE);

رمز PrintLabel:

...

m_DymoAddIn.Print2(Copies, false, Tray);

...

هنا هو CDYMOADDIN4.H:

// Machine generated IDispatch wrapper class(es) created with Add Class from Typelib Wizard

// CDymoAddIn4 wrapper class

class CDymoAddIn4 : public COleDispatchDriver
{
public:
    CDymoAddIn4(){} // Calls COleDispatchDriver default constructor
    CDymoAddIn4(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch) {}
    CDymoAddIn4(const CDymoAddIn4& dispatchSrc) : COleDispatchDriver(dispatchSrc) {}

    // Attributes
public:

    // Operations
public:


    // IDymoAddIn4 methods
public:
    BOOL Open(LPCTSTR FileName)
    {
        BOOL result;
        static BYTE parms[] = VTS_BSTR ;
        InvokeHelper(0x1, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, FileName);
        return result;
    }
    BOOL Save()
    {
        BOOL result;
        InvokeHelper(0x2, DISPATCH_METHOD, VT_BOOL, (void*)&result, NULL);
        return result;
    }
    BOOL SaveAs(LPCTSTR FileName)
    {
        BOOL result;
        static BYTE parms[] = VTS_BSTR ;
        InvokeHelper(0x3, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, FileName);
        return result;
    }
    BOOL Print(long Copies, BOOL bShowDialog)
    {
        BOOL result;
        static BYTE parms[] = VTS_I4 VTS_BOOL ;
        InvokeHelper(0x4, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, Copies, bShowDialog);
        return result;
    }
    void Hide()
    {
        InvokeHelper(0x5, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
    }
    void Show()
    {
        InvokeHelper(0x6, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
    }
    void SysTray(BOOL State)
    {
        static BYTE parms[] = VTS_BOOL ;
        InvokeHelper(0x7, DISPATCH_METHOD, VT_EMPTY, NULL, parms, State);
    }
    void Quit()
    {
        InvokeHelper(0x8, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
    }
    CString get_FileName()
    {
        CString result;
        InvokeHelper(0x9, DISPATCH_PROPERTYGET, VT_BSTR, (void*)&result, NULL);
        return result;
    }
    BOOL SelectPrinter(LPCTSTR Printer)
    {
        BOOL result;
        static BYTE parms[] = VTS_BSTR ;
        InvokeHelper(0xa, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, Printer);
        return result;
    }
    CString GetDymoPrinters()
    {
        CString result;
        InvokeHelper(0xb, DISPATCH_METHOD, VT_BSTR, (void*)&result, NULL);
        return result;
    }
    CString GetMRULabelFiles()
    {
        CString result;
        InvokeHelper(0x12d, DISPATCH_METHOD, VT_BSTR, (void*)&result, NULL);
        return result;
    }
    BOOL Open2(LPCTSTR FileName)
    {
        BOOL result;
        static BYTE parms[] = VTS_BSTR ;
        InvokeHelper(0x12e, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, FileName);
        return result;
    }
    long GetMRULabelFileCount()
    {
        long result;
        InvokeHelper(0x12f, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
        return result;
    }
    CString GetMRULabelFileName(long Index)
    {
        CString result;
        static BYTE parms[] = VTS_I4 ;
        InvokeHelper(0x130, DISPATCH_METHOD, VT_BSTR, (void*)&result, parms, Index);
        return result;
    }
    BOOL OpenMRULabelFile(long Index)
    {
        BOOL result;
        static BYTE parms[] = VTS_I4 ;
        InvokeHelper(0x131, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, Index);
        return result;
    }
    BOOL OpenMRULabelFileByName(LPCTSTR FileName)
    {
        BOOL result;
        static BYTE parms[] = VTS_BSTR ;
        InvokeHelper(0x132, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, FileName);
        return result;
    }
    BOOL Print2(long Copies, BOOL bShowDlg, long Tray)
    {
        BOOL result;
        static BYTE parms[] = VTS_I4 VTS_BOOL VTS_I4 ;
        InvokeHelper(0x191, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, Copies, bShowDlg, Tray);
        return result;
    }
    long GetCurrentPaperTray()
    {
        long result;
        InvokeHelper(0x192, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
        return result;
    }
    void StartPrintJob()
    {
        InvokeHelper(0xc9, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
    }
    void EndPrintJob()
    {
        InvokeHelper(0xca, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
    }
    BOOL IsTwinTurboPrinter(LPCTSTR PrinterName)
    {
        BOOL result;
        static BYTE parms[] = VTS_BSTR ;
        InvokeHelper(0xcb, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms, PrinterName);
        return result;
    }
    CString GetCurrentPrinterName()
    {
        CString result;
        InvokeHelper(0xce, DISPATCH_METHOD, VT_BSTR, (void*)&result, NULL);
        return result;
    }

    // IDymoAddIn4 properties
public:

};
هل كانت مفيدة؟

المحلول

أضف مكالمات إلى StartPrintJob () و endprintjob (). في بعض الأحيان ، عندما ترسل بيانات إلى نظام ، فإنك تفترض أنك سترسل المزيد واختصاصات البيانات - تحتاج إلى طريقة للقول مرحبًا ، لقد انتهيت ، دعنا نفعل هذا الشيء.

وقليلًا من المشاعر الفوقية - تأكد من الاستمرار في التجربة - وحاول تقليل مشكلتك إلى أصغر مثال ممكن لإلغاء توصيل عقلك والتركيز على مجموعة أقل من عناصر المشكلات

(انظر التعليقات التي تسأل عن نشأة هذه الإجابة)

نصائح أخرى

كم عدد الملصقات المطبوعة قبل ظهور المشكلة؟ هل يمكن أن يكون هذا تسرب ذاكرة/مقبض يتسبب في إبطاء الطباعة؟ هل تقوم بتحرير جميع كائنات com بشكل صحيح؟ هل قمت بفحص استخدام الموارد باستخدام ProcessExplorer أو مدير المهام؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top