1. 程式人生 > >C# TSC列印二維碼和條形碼(轉) C#呼叫dll提示"試圖載入格式不正確的程式"解決方法

C# TSC列印二維碼和條形碼(轉) C#呼叫dll提示"試圖載入格式不正確的程式"解決方法

效果圖

 

開發、使用環境說明

  1. 安裝TSC_7.3.8_M-3.exe印表機驅動,安裝時選擇對應的ttp 244 pro
  2. 將TSCLIB.dll複製到C:\Windows\system

驅動安裝說明

 

  選擇下一步

 

  選擇安裝路徑,預設即可,選擇下一步

 

   選擇安裝印表機,選擇下一步

 

  選擇其他,點選下一步

 

  選擇對應的印表機型號,點選下一步

 

  選擇USB埠,點選下一步

 

  直接預設即可,點選下一步

  驅動安裝完成

 

TSCLIB.cs程式碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace WindowsFormsPrint
{
    public class TSCLIB_DLL
    {
        [DllImport(
"TSCLIB.dll", EntryPoint = "about")] public static extern int about(); [DllImport("TSCLIB.dll", EntryPoint = "openport")] public static extern int openport(string printername); [DllImport("TSCLIB.dll", EntryPoint = "barcode")] public static extern int
barcode(string x, string y, string type, string height, string readable, string rotation, string narrow, string wide, string code); [DllImport("TSCLIB.dll", EntryPoint = "clearbuffer")] public static extern int clearbuffer(); [DllImport("TSCLIB.dll", EntryPoint = "closeport")] public static extern int closeport(); [DllImport("TSCLIB.dll", EntryPoint = "downloadpcx")] public static extern int downloadpcx(string filename, string image_name); [DllImport("TSCLIB.dll", EntryPoint = "formfeed")] public static extern int formfeed(); [DllImport("TSCLIB.dll", EntryPoint = "nobackfeed")] public static extern int nobackfeed(); [DllImport("TSCLIB.dll", EntryPoint = "printerfont")] public static extern int printerfont(string x, string y, string fonttype, string rotation, string xmul, string ymul, string text); [DllImport("TSCLIB.dll", EntryPoint = "printlabel")] public static extern int printlabel(string set, string copy); [DllImport("TSCLIB.dll", EntryPoint = "sendcommand")] public static extern int sendcommand(string printercommand); [DllImport("TSCLIB.dll", EntryPoint = "setup")] public static extern int setup(string width, string height, string speed, string density, string sensor, string vertical, string offset); [DllImport("TSCLIB.dll", EntryPoint = "windowsfont")] public static extern int windowsfont(int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline, string szFaceName, string content); //開啟印表機埠,並進行相關設定 public static void openportExt() { TSCLIB_DLL.openport("TSC TTP-244 Pro");//找打印表機埠 TSCLIB_DLL.sendcommand("SIZE 60 mm,30 mm");//設定條碼大小 TSCLIB_DLL.sendcommand("GAP 2 mm,0");//設定條碼間隙 TSCLIB_DLL.sendcommand("SPEED 4");//設定列印速度 TSCLIB_DLL.sendcommand("DENSITY 7");//設定墨汁濃度 TSCLIB_DLL.sendcommand("DERECTION 1");//設定相對起點 TSCLIB_DLL.sendcommand("REFERENCE 3 mm,3 mm");//設定偏移邊框 TSCLIB_DLL.sendcommand("CLS");//清除記憶(每次列印新的條碼時先清除上一次的列印記憶) } //列印在用車檔案二維碼 public static void printVehicleCode(string str_hetong, string str_zhengjian, string str_name) { char space = (char)(32); string codeValue = str_hetong + space + str_zhengjian; TSCLIB_DLL.sendcommand("CLS");//需要清除上一次的列印記憶 TSCLIB_DLL.sendcommand("QRCODE 260,20,H,7,A,0,M2,S7,\"" + codeValue + "\""); TSCLIB_DLL.windowsfont(240, 100, 24, 180, 0, 0, "黑體", str_hetong); TSCLIB_DLL.windowsfont(240, 140, 24, 180, 0, 0, "黑體", str_zhengjian); TSCLIB_DLL.windowsfont(240, 180, 24, 180, 0, 0, "黑體", str_name); TSCLIB_DLL.printlabel("1", "1"); } //列印財務條形碼 public static void printFinanceCode(string str_Date, string str_siteNo, string str_siteName, string str_Num, string str_Name, int count) { for (int i = 0; i < count; i++) { char Num = (char)(i + 65); char space = (char)(32); string value = str_Date + space + str_siteNo + space + str_Num + space + Num; string txt = str_Date + space + str_siteName + space + str_Num + space + str_Name + space + Num; TSCLIB_DLL.sendcommand("CLS");//需要清除上一次的列印記憶 TSCLIB_DLL.barcode("40", "50", "128", "160", "0", "0", "2", "2", value); TSCLIB_DLL.windowsfont(440, 35, 24, 180, 0, 0, "黑體", txt); TSCLIB_DLL.printlabel("1", "1"); } } //關閉印表機埠 public static void closeportExt() { TSCLIB_DLL.closeport(); } } }

列印二維碼:

private void print_Click(object sender, EventArgs e)
        {
            try
            {
                print.Enabled = false;
                base.DoWork(DoPrint);
                print.Enabled = true;
            }
            catch (Exception ex)
            {
                //   FileLogHelper.WriteInfoLog(ex.ToString());
                MessageBox.Show(ex.ToString());
            }

        }

        private void DoPrint(object sender, EventArgs e)
        {
            DataGridViewSelectedRowCollection rows = ArchivesView.SelectedRows;
            if (rows.Count <= 0)
            {
                MessageBox.Show("請先選擇資料項!");
                return;
            }
            TSCLIB_DLL.openportExt();
            foreach (DataGridViewRow dr in rows)
            {
                TSCLIB_DLL.printVehicleCode(dr.Cells[1].Value.ToString(), dr.Cells[2].Value.ToString(), dr.Cells[3].Value.ToString());
            }
            TSCLIB_DLL.closeportExt();
        }

C#呼叫dll提示"試圖載入格式不正確的程式"解決方法

程式在32位作業系統上執行正常,在64位作業系統上執行讀卡功能提示”試圖載入格式不正確“。

程式在64位作業系統上執行正常,在64位作業系統上執行讀卡功能提示”試圖載入格式不正確“。

--------------------------------------------------------------------------------------------

 

點選專案屬性,把目標平臺Any CPU 設定為X86(32位作業系統)或者X64(64位作業系統)

按照上面解決方案可能會有下面的問題:

 C# form繼承問題 : 提示 無法載入基類 ;請確保已引用該程式集並已生成所有專案。   把 生成 - 目標平臺 改成 x86或者Any CPU ,重新生成一次,Form可正常編輯。   

所以新的解決方案是:選擇Any CPU 把下面打勾的去掉