C3032
2025-12-20 38c333f8091e5062be0bbdd81960315ebce69008
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using static SmartScanner.IDViewerDefines;
using System.Reflection;
 
 
namespace SmartScanner
{
    class IDViewerSDK
    {
        public class Node
        {
            public IDViewerDefines.IDDeviceInfo data;
            public Node next;
        }
 
        public struct LinkedList
        {
            public Node head;
            [MarshalAs(UnmanagedType.SysInt)]
            public int size;
        }
 
        /****************************************
         IDImage
        *****************************************/
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDImage_Init", CharSet = CharSet.Ansi)]
        public static extern long IDImage_Init(ref IntPtr imagePtr);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDImage_Destroy", CharSet = CharSet.Ansi)]
        public static extern void IDImage_Destroy(ref IntPtr imagePtr);             //
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDImage_Width", CharSet = CharSet.Ansi)]
        public static extern long IDImage_Width(IntPtr imageHandle);                //图片宽度
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDImage_Height", CharSet = CharSet.Ansi)]
        public static extern long IDImage_Height(IntPtr imageHandle);               //图片高度
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDImage_Step", CharSet = CharSet.Ansi)]
        public static extern long IDImage_Step(IntPtr imageHandle);                 //步长
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDImage_BitDepth", CharSet = CharSet.Auto)]
        public static extern long IDImage_BitDepth(IntPtr imageHandle, ref IntPtr imageType);       //位深
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDImage_Channels", CharSet = CharSet.Ansi)]
        public static extern long IDImage_Channels(IntPtr imageHandle);             //通道数
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDImage_ImageData", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDImage_ImageData(IntPtr imageHandle);          //浅拷贝
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDImage_SaveImage", CharSet = CharSet.Ansi)]
        public static extern long IDImage_SaveImage(IntPtr imageHandle, string filePath, int compression);      //保存
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDImage_SaveImageW", CharSet = CharSet.Unicode)]
        public static extern long IDImage_SaveImageW(IntPtr imageHandle, string filePath, int compression);      //宽字节保存
 
        /*
        * VarPoint
        */
 
        // 构造函数声明
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "VarPoint_Create", CharSet = CharSet.Ansi)]
        public static extern long VarPoint_Create(ref IntPtr handle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "VarPoint_CreateWithValues", CharSet = CharSet.Ansi)]
        public static extern long VarPoint_CreateWithValues(ref IntPtr handle, double xPoint, double yPoint);
 
        // 析构函数声明
        [DllImport("IDViewerCSDK.dll", EntryPoint = "VarPoint_Destroy", CharSet = CharSet.Ansi)]
        public static extern void VarPoint_Destroy(ref IntPtr handle);
 
        /*
        * VarFlags
        */
 
 
        // 构造函数
        [DllImport("IDViewerCSDK.dll", EntryPoint = "VarFlags_Create", CharSet = CharSet.Ansi)]
        public static extern long VarFlags_Create(ref IntPtr handle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "VarFlags_CreateWithFlags", CharSet = CharSet.Ansi)]
        public static extern long VarFlags_CreateWithFlags(ref IntPtr handle, uint flags);
 
        // 成员函数
        [DllImport("IDViewerCSDK.dll", EntryPoint = "VarFlags_Set", CharSet = CharSet.Ansi)]
        public static extern void VarFlags_Set(ref IntPtr handle, uint flag);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "VarFlags_Unset", CharSet = CharSet.Ansi)]
        public static extern void VarFlags_Unset(ref IntPtr handle, uint flag);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "VarFlags_Reset", CharSet = CharSet.Ansi)]
        public static extern void VarFlags_Reset(ref IntPtr handle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "VarFlags_Check", CharSet = CharSet.Ansi)]
        public static extern bool VarFlags_Check(ref IntPtr handle, uint flag);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "VarFlags_Get", CharSet = CharSet.Ansi)]
        public static extern uint VarFlags_Get(ref IntPtr handle);
 
        // 析构函数
        [DllImport("IDViewerCSDK.dll", EntryPoint = "VarFlags_Destroy", CharSet = CharSet.Ansi)]
        public static extern void VarFlags_Destroy(ref IntPtr handle);
 
        /*
        * IDVariable
        */
        // 创建 IDVariable 实例
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_CreateIDVariable", CharSet = CharSet.Ansi)]
 
        public static extern IntPtr IDVariab_CreateIDVariable();
 
        // 释放 IDVariable 实例
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_DestroyIDVariable", CharSet = CharSet.Ansi)]
        public static extern void IDVariab_DestroyIDVariable(IntPtr IDVariableHandle);
        // 设置 double 数据
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_SetDataDouble", CharSet = CharSet.Ansi)]
        public static extern void IDVariab_SetDataDouble(IntPtr IDVariableHandle, double data, bool setInit);
 
        // 设置 string 数据
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_SetDataChar", CharSet = CharSet.Ansi)]
        public static extern void IDVariab_SetDataChar(IntPtr IDVariableHandle, string data, bool setInit);
        // 设置 string 数据
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_SetDataString", CharSet = CharSet.Ansi)]
        public static extern void IDVariab_SetDataString(IntPtr IDVariableHandle, string data, bool setInit);
 
        // 设置 bool 数据
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_SetDataBool", CharSet = CharSet.Ansi)]
        public static extern void IDVariab_SetDataBool(IntPtr IDVariableHandle, bool data, bool setInit);
        // 设置 uint 数据
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_SetDataUnsignedInt", CharSet = CharSet.Ansi)]
        public static extern void IDVariab_SetDataUnsignedInt(IntPtr IDVariableHandle, uint data, bool setInit = false);
        // 设置 VarPoint 数据
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_SetDataVarPoint", CharSet = CharSet.Ansi)]
        public static extern void IDVariab_SetDataVarPoint(IntPtr IDVariableHandle, ref double data, bool setInit = false);
        // 设置vector<double> data数据
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_SetDataVectorDouble", CharSet = CharSet.Ansi)]
        public static extern void IDVariab_SetDataVectorDouble(IntPtr IDVariableHandle, IntPtr data, int size, bool setInit = false);
        // 设置vector<string> data 数据
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_SetDataStringArray", CharSet = CharSet.Ansi)]
 
        public static extern void IDVariab_SetDataStringArray(IntPtr IDVariableHandle, string[] data, int size, bool setInit = false);
 
        // 将vector<bool>转换
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_SetDataBoolVector", CharSet = CharSet.Ansi)]
        public static extern void IDVariab_SetDataBoolVector(IntPtr IDVariableHandle, ref bool data, int size, bool setInit = false);
 
        // 将vector<bool>转换为C风格的接口
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariab_SetDataVarFlags", CharSet = CharSet.Ansi)]
        public static extern void IDVariab_SetDataVarFlags(IntPtr IDVariableHandle, ref IntPtr handle, bool setInit = false);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariable_ToNumber", CharSet = CharSet.Ansi)]
        public static extern double IDVariable_ToNumber(IntPtr IDVariableHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariable_ToBool", CharSet = CharSet.Ansi)]
        public static extern bool IDVariable_ToBool(IntPtr IDVariableHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariable_ToFlags", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDVariable_ToFlags(IntPtr IDVariableHandle);
 
        /*
        * class  IDCodeParam
        */
        // 构造函数的封装
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_Create", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDCodeParam_Create();
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_CreateCopy", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDCodeParam_CreateCopy(IntPtr IDCodeParamHandle);
 
        // 使用不同参数构造函数的封装
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_CreateFromQRCodeParam", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDCodeParam_CreateFromQRCodeParam(ref IDQRCodeParam qrCodeParam);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_CreateFromDMCodeParam", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDCodeParam_CreateFromDMCodeParam(ref IDDMCodeParam dmCodeParam);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_CreateFromPDF417CodeParam", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDCodeParam_CreateFromPDF417CodeParam(ref IDPDF417CodeParam pdf417CodeParam);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_CreateFromBarCodeParam", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDCodeParam_CreateFromBarCodeParam(ref IDBarCodeParam barCodeParam);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_CreateFromMicroQRParam", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDCodeParam_CreateFromMicroQRParam(ref IDMicroQRParam microQRParam);
 
        // 赋值操作符的封装
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_Assign", CharSet = CharSet.Ansi)]
        public static extern void IDCodeParam_Assign(IntPtr self, IntPtr IDCodeParamHandle);
 
        // 设置和获取参数的函数封装
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_SetQRCodeParam", CharSet = CharSet.Ansi)]
        public static extern void IDCodeParam_SetQRCodeParam(IntPtr self, ref IDQRCodeParam param);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_GetQRCodeParam", CharSet = CharSet.Ansi)]
        public static extern ref IDQRCodeParam IDCodeParam_GetQRCodeParam(IntPtr self);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_SetDMCodeParam", CharSet = CharSet.Ansi)]
        public static extern void IDCodeParam_SetDMCodeParam(IntPtr self, ref IDDMCodeParam param);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_GetDMCodeParam", CharSet = CharSet.Ansi)]
        public static extern ref IDDMCodeParam IDCodeParam_GetDMCodeParam(IntPtr self);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_SetStackedCodeParam", CharSet = CharSet.Ansi)]
        public static extern void IDCodeParam_SetStackedCodeParam(IntPtr self, ref IDQRCodeParam param);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_GetStackedCodeParam", CharSet = CharSet.Ansi)]
        public static extern ref IDPDF417CodeParam IDCodeParam_GetStackedCodeParam(IntPtr self);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_SetBarCodeParam", CharSet = CharSet.Ansi)]
 
        public static extern void IDCodeParam_SetBarCodeParam(IntPtr self, ref IDBarCodeParam param);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_GetBarCodeParam", CharSet = CharSet.Ansi)]
        public static extern ref IDBarCodeParam IDCodeParam_GetBarCodeParam(IntPtr self);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_SetMicroQRParam", CharSet = CharSet.Ansi)]
 
        public static extern void IDCodeParam_SetMicroQRParam(IntPtr self, ref IDMicroQRParam param);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_GetMicroQRParam", CharSet = CharSet.Ansi)]
        public static extern ref IDMicroQRParam IDCodeParam_GetMicroQRParam(IntPtr self);
 
        // 获取类型的封装
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCodeParam_GetType", CharSet = CharSet.Ansi)]
        public static extern IDCodeCategory IDCodeParam_GetType(IntPtr self);
 
 
        /**
        * @brief setFilterRules                    设置过滤规则
        * @param filterRules                    过滤规则
        * @return         
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetFilterRules", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_SetFilterRules(IntPtr deviceHandle, IDFilterRules filterRules);
 
        /**
        * @brief setFilterRules                    删除过滤规则
        * @return
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_RemoveFilterRules", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_RemoveFilterRules(IntPtr deviceHandle);
 
        /**
        * @brief addEnvironmentVariable            添加一个环境变量
        * @param varName                        环境变量名称
        * @param varValue                        环境变量对应的值
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_AddEnvironmentVariable", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_AddEnvironmentVariable(IntPtr deviceHandle, string varName, IntPtr varValue);
 
        /**
        * @brief deleteEnvironmentVariable        删除指定环境变量
        * @param varName                        要删除的环境变量名称
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_DeleteEnvironmentVariable", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_DeleteEnvironmentVariable(IntPtr deviceHandle, string varName);
 
 
        /**
        * @brief getEnvironmentVariableNames    获取所有环境变量名
        * @param varNames                        环境变量名列表
        * @return
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetEnvironmentVariableNamesEX", CharSet = CharSet.Ansi)]   //使用后需要调用IDDevice_FreeSolutionList 释放StringList
        public static extern ref StringList IDDevice_GetEnvironmentVariableNamesEX(IntPtr deviceHandle);
 
        /**
        * @brief getEnvironmentVariable            根据变量名获取环境变量的值
        * @param varName                        环境变量名称
        * @param varValue                        环境变量对应的值
        * @return
*/
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetEnvironmentVariable", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetEnvironmentVariable(IntPtr deviceHandle, ref string varName, IntPtr varValue);
 
        /**
        * @brief getParamValue                    获取方案参数
        * @param paramName                        参数名枚举值
        * @param generalParam                    参数取值
        * @return
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetParamValue", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetParamValue(IntPtr deviceHandle, IDGeneralParamsName paramName, IntPtr generalParam);
 
 
        /**
        * @brief getParamValue                    设置方案参数
        * @param paramName                        参数名枚举值
        * @param generalParam                    参数取值
        * @return
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetParamValue", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_SetParamValue(IntPtr deviceHandle, IDGeneralParamsName paramName, IntPtr generalParam);
        //class IDGeneralParam
        // 创建空对象 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create();
 
        // 基础类型 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_Bool", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_Bool(bool data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_Char", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_Char(string data);
 
 
        // 数值类型 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_UnsignedChar", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_UnsignedChar(char data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_Float", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_Float(float data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_UnsignedShort", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_UnsignedShort(ushort data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_UnsignedInt", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_UnsignedInt(uint data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_UnsignedLong", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_UnsignedLong(ulong data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_Long", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_Long(long data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_Int", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_Int(int data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_Short", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_Short(short data);
 
        // 特殊类型 
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_VarPoint", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_VarPoint(IntPtr data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_VarFlags", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_VarFlags(IntPtr data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_VectorDouble", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_VectorDouble(ref double data, int size);
 
        /*
         string[] data = new string[] { "data1", "data2", "data3" };
         */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_VectorString", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_VectorString(string[] data, int size);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_VectorBool", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_VectorBool(ref bool data, int size);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_UChar", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_UChar(char data);
 
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_UShort", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_UShort(ushort data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_UInt", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_UInt(uint data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_Create_ULong", CharSet = CharSet.Ansi)]
        public static extern IntPtr IDGeneralParam_Create_ULong(ulong data);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_SetName", CharSet = CharSet.Ansi)]
 
        public static extern void IDGeneralParam_SetName(IntPtr generalParamHandle, string name);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_GetName", CharSet = CharSet.Ansi)]
        public static extern void IDGeneralParam_GetName(IntPtr generalParamHandle, string name);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_GetType", CharSet = CharSet.Ansi)]
 
        public static extern IDGeneralParamsType IDGeneralParam_GetType(IntPtr generalParamHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_SetComment", CharSet = CharSet.Ansi)]
        public static extern void IDGeneralParam_SetComment(IntPtr generalParamHandle, string comment);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_GetComment", CharSet = CharSet.Ansi)]
 
        public static extern void IDGeneralParam_GetComment(IntPtr generalParamHandle, string comment);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_GetID", CharSet = CharSet.Ansi)]
 
        public static extern int IDGeneralParam_GetID(IntPtr generalParamHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_SetID", CharSet = CharSet.Ansi)]
 
        public static extern void IDGeneralParam_SetID(IntPtr generalParamHandle, int id);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_ToInt", CharSet = CharSet.Ansi)]
 
        public static extern int IDGeneralParam_ToInt(IntPtr generalParamHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_ToNumber", CharSet = CharSet.Ansi)]   //PLC变量类型是Num
 
        public static extern double IDGeneralParam_ToNumber(IntPtr generalParamHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_ToBool", CharSet = CharSet.Ansi)]
 
        public static extern bool IDGeneralParam_ToBool(IntPtr generalParamHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_ToChar", CharSet = CharSet.Ansi)]
 
        public static extern char IDGeneralParam_ToChar(IntPtr generalParamHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_ToFloat", CharSet = CharSet.Ansi)]
 
        public static extern float IDGeneralParam_ToFloat(IntPtr generalParamHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_ToCharItr", CharSet = CharSet.Ansi)]
 
        public static extern IntPtr IDGeneralParam_ToCharItr(IntPtr generalParamHandle);  //字符串类型获取后必须使用IDGeneralParam_FreeCharItr 对指针进行释放;
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_FreeCharItr", CharSet = CharSet.Ansi)]
 
        public static extern void IDGeneralParam_FreeCharItr(IntPtr ptr);   //和上面IDGeneralParam_ToCharItr配套使用完后进行释放;
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_ToUShort", CharSet = CharSet.Ansi)]
        public static extern ushort IDGeneralParam_ToUShort(IntPtr generalParamHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_ToUInt", CharSet = CharSet.Ansi)]
        public static extern uint IDGeneralParam_ToUInt(IntPtr generalParamHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_ToULong", CharSet = CharSet.Ansi)]
        public static extern ulong IDGeneralParam_ToULong(IntPtr generalParamHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDGeneralParam_ToShort", CharSet = CharSet.Ansi)]
        public static extern short IDGeneralParam_ToShort(IntPtr generalParamHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVariable_ToFlags", CharSet = CharSet.Ansi)]
        public static extern long IDGeneralParam_ToLong(IntPtr generalParamHandle);
 
        /****************************************
        IDDevice
        *****************************************/
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_Open", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_Open(IntPtr deviceHandle);                               //打开设备
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_IsOpen", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_IsOpen(IntPtr deviceHandle);                             //打开状态
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_StartRunning", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_StartRunning(IntPtr deviceHandle);                       //默认 注册回调   运行设备
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_StartDebugging", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_StartDebugging(IntPtr deviceHandle);                     //启动调试
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_IsDebugging", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_IsDebugging(IntPtr deviceHandle);                        //调试状态
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_IsRunning", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_IsRunning(IntPtr deviceHandle);                          //运行状态
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_IsConnected", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_IsConnected(IntPtr deviceHandle);                        //连接状态  
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_Stop", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_Stop(IntPtr deviceHandle);                               //停止
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_Close", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_Close(IntPtr deviceHandle);                             //关闭
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_CaptureImage", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_CaptureImage(IntPtr deviceHandle, IntPtr imageHandle);   //采集一次
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetLasersightEnable", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_SetLasersightEnable(IntPtr deviceHandle, bool enable);    //设置使能瞄准器
 
 
        /****************************************
        DeviceInfo 
        *****************************************/
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetDeviceInfo", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetDeviceInfo(IntPtr deviceHandle, ref IDDeviceInfo DeviceInfoHandel); //获取设备信息(SN/MAC/IP/MODEL)
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetHardWareParams", CharSet = CharSet.Ansi)]
        public static extern IDViewerDefines.IDDeviceHarewareParams IDDevice_GetHardWareParams(IntPtr deviceHandle);
 
        //此接口需要VS2019以上的版本,C#7.0新增引入了新的语法ref return和ref locals,允许函数的返回值也可以被声明为引用
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetSolutionList", CharSet = CharSet.Ansi)]
        public static extern ref StringList IDDevice_GetSolutionList(IntPtr deviceHandle, int timeout = 2000);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetRunningSolution", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_SetRunningSolution(IntPtr deviceHandle, string solutionName, int timeout = 2000);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetRunningSolution", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetRunningSolution(IntPtr deviceHandle, byte[] solutionName, int timeout = 2000);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_DeleteSolution", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_DeleteSolution(IntPtr deviceHandle, string solutionName, int timeout = 2000);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_Release", CharSet = CharSet.Ansi)]
        public static extern void IDDevice_Release(IntPtr deviceHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_FreeSolutionList", CharSet = CharSet.Ansi)]
        public static extern void IDDevice_FreeSolutionList(StringList solutionList);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_getROIInfoLength", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_getROIInfoLength(IntPtr deviceHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_getROIInfo", CharSet = CharSet.Ansi)]                 //获取ROI
        public static extern IDViewerDefines.IDROIInfo IDDevice_getROIInfo(IntPtr deviceHandle, int roiIndex);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_DeleteROI", CharSet = CharSet.Ansi)]                  //删除ROI
        public static extern long IDDevice_DeleteROI(IntPtr deviceHandle, int roiIndex);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_AddROI", CharSet = CharSet.Ansi)]                     //添加ROI
        public static extern long IDDevice_AddROI(IntPtr deviceHandle, IDViewerDefines.IDROIInfo roiInfo);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_ModifyROI", CharSet = CharSet.Ansi)]                  //修改ROI
        public static extern long IDDevice_ModifyROI(IntPtr deviceHandle, int roiIndex, IDViewerDefines.IDPoint topLeftPoint, IDViewerDefines.IDPoint bottomRightPoint);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetFocusLocation", CharSet = CharSet.Ansi)]
        public static unsafe extern long IDDevice_GetFocusLocation(IntPtr deviceHandle, int* focusLocation);        //获取焦距位置
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_AutoFocus", CharSet = CharSet.Ansi)]     //自动对焦
        public static unsafe extern long IDDevice_AutoFocus(IntPtr deviceHandle, int paramIndex, ref int focusLocation);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetFocusLocation", CharSet = CharSet.Ansi)]     //设置焦距位置
        public static extern long IDDevice_SetFocusLocation(IntPtr deviceHandle, int paramIndex, int focusLocation);
 
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetExposure", CharSet = CharSet.Ansi)]     //设置曝光
        public static extern long IDDevice_SetExposure(IntPtr deviceHandle, int paramIndex, double exposure);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetGain", CharSet = CharSet.Ansi)]     //设置增益
        public static extern long IDDevice_SetGain(IntPtr deviceHandle, int paramIndex, int gain);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetGamma", CharSet = CharSet.Ansi)]     //设置伽马
        public static extern long IDDevice_SetGamma(IntPtr deviceHandle, int paramIndex, double gamma);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetIlluminate", CharSet = CharSet.Ansi)]     //设置通道亮度:通道数,设置-1或小于0,表示同时设置所有通道
        public static extern long IDDevice_SetIlluminate(IntPtr deviceHandle, int paramIndex, int channel, int value);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetIlluminateEnable", CharSet = CharSet.Ansi)]     //设置通道使能:通道数,设置-1或小于0,表示同时设置所有通道
        public static extern long IDDevice_SetIlluminateEnable(IntPtr deviceHandle, int paramIndex, int channel, bool enable);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetIlluminanatbrightnessLength", CharSet = CharSet.Ansi)]//获取illuminanatbrightness 数量
        public static extern long IDDevice_GetIlluminanatbrightnessLength(IntPtr deviceHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetIlluminanatbrightness", CharSet = CharSet.Ansi)] //获取illuminanatbrightness 
        public static extern IDNodeParam IDDevice_GetIlluminanatbrightness(IntPtr deviceHandle, uint index);
 
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetTriggerAllParams", CharSet = CharSet.Ansi)] //获取所有触发参数
        public static extern long IDDevice_GetTriggerAllParams(IntPtr deviceHandle, ref IDTriggerParams triggerParams, ref IDHardwareTrigger hardwareTrigger,
           ref IDTcpServerTrigger tcpServerTrigger, ref IDTcpClientTrigger tcpClientTrigger, ref IDSerialPortTrigger serialPortTrigger, ref IDUDPTrigger udpTrigger);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetDataconfigAllParams", CharSet = CharSet.Ansi)] //获取所有数据处理参数
        public static extern long IDDevice_GetDataconfigAllParams(IntPtr deviceHandle, ref IDFilterInfo filterInfo, ref IDFilterRules filterRules, ref IDDataConfig dataConfig);
 
        //[DllImport("IDViewerCSDK.dll", EntryPoint = "getTriggerAllParams", CharSet = CharSet.Ansi)]
        //public static extern long getTriggerAllParams(IntPtr deviceHandle, IDTriggerParams triggerParams, IDHardwareTrigger hardwareTrigger,
        //    IDTcpServerTrigger tcpServerTrigger, IDTcpClientTrigger tcpClientTrigger, IDSerialPortTrigger serialPortTrigger, IDUDPTrigger udpTrigger);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetCommunicationAllParams", CharSet = CharSet.Ansi)] //获取所有通信参数
        public static extern long IDDevice_GetCommunicationAllParams(IntPtr deviceHandle, ref IDTcpServerCommunication tcpServerInfo, ref IDTcpClientCommunication tcpClientInfo, ref IDSerialPortCommunication serialPortInfo,
            ref IDKeyboardConfig keyboardInfo, ref IDEipConfig eipConfig, ref IDModbusConfig modbusConfig, ref IDProfinetConfig profinetConfig, ref IDFtpConfig ftpConfig, ref IDWebpageConfig webpageConfig,
            ref IDFinsConfig finsConfig, ref IDHttpConfig httpConfig, ref IDNetworkingConfig networkingConfig);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetCommunicationAllParams_V2", CharSet = CharSet.Ansi)] //获取所有通信参数
        public static extern long IDDevice_GetCommunicationAllParams_V2(IntPtr deviceHandle, ref IDTcpServerCommunication tcpServerInfo, ref IDTcpClientCommunication tcpClientInfo, ref IDSerialPortCommunication serialPortInfo,
            ref IDKeyboardConfig keyboardInfo, ref IDEipConfig eipConfig, ref IDModbusConfig modbusConfig, ref IDProfinetConfig profinetConfig, ref IDFtpConfig ftpConfig, ref IDWebpageConfig webpageConfig,
            ref IDFinsConfig finsConfig, ref IDHttpConfig httpConfig, ref IDNetworkingConfig networkingConfig, ref IDMcConfig mcConfig, ref IDUdpConfig iDUdpConfig);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_DownLoadCurrentSolution", CharSet = CharSet.Ansi)] //下载当前方案 参数设置为临时设置,需要调用该方法才能保存到设备离线生效
        public static extern long IDDevice_DownLoadCurrentSolution(IntPtr deviceHandle);
 
 
 
        /**
        * @brief uploadSolution                             上传方案
        * @param solutionData                               方案数据
        * @param solutionName                               方案名称
        * @param timeout                                    超时时间
        * @return                                           错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_UploadSolution", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_UploadSolution(IntPtr deviceHandle, string solutionData, string solutionName, int timeout = 3000);
        /**
         * @brief downLoadSolution                          下载方案
         * @param solutionData                              方案数据
         * @param solutionName                              方案名称
         * @param timeout                                   超时时间
         * @return                                          错误码
         */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_DownLoadSolution", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_DownLoadSolution(IntPtr deviceHandle, ref string solutionData, string solutionName, int timeout = 3000);
 
        /**
        * @brief openMC                            打开MC
        * @param mode                           MC 品牌型号(取值范围:(Mitsubishi_L:0,Mitsubishi_Q:1,Mitsubishi_R:2,Mitsubishi_A:4,Mitsubishi_Fx3U:5,Mitsubishi_Fx5U:6))
        * @param format                         MC 格式 (取值范围:BIN:0,ASCII:1)
        * @param ip                                MC IP地址
        * @param port                            MC 端口
        * @param startAddress                   MC 起始地址
        * @param resultSwap                     MC 结果交换
        * @param resultSize                     MC 结果大小
        * @param timeout                        MC MC结果超时
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_OpenMC", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_OpenMC(IntPtr deviceHandle, IDMcBrandModel mode, IDMcDataFormat format, string ip, int port, int startAddress, bool resultSwap, int resultSize, int timeout);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_CloseMC", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_CloseMC(IntPtr deviceHandle);
 
        /**
        * @brief getMcInfo                        获取当前MC连接配置信息
        * @param mode                           MC品牌型号
        * @param format                         MC格式(BIN/ASCII)
        * @param ip                             MC的IP地址
        * @param port                           MC的端口
        * @param startAddress                   MC起始地址
        * @param resultSwap                     MC结果交换配置
        * @param resultSize                     MC结果大小
        * @param timeout                        MC结果超时时间
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetMcInfo", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetMcInfo(IntPtr deviceHandle, ref IDMcBrandModel mode, ref IDMcDataFormat format, ref string ip, ref int port, ref int startAddress, ref bool resultSwap, ref int resultSize, ref int timeout);
 
        /*
        * 2025.2.15 新增IDDevice类接口
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_ClearROI", CharSet = CharSet.Ansi)]  //清除所有ROI
        public static extern long IDDevice_ClearROI(IntPtr deviceHandle);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_AddImageROI", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_AddImageROI(IntPtr deviceHandle, ref IDImageROI roiInfos); //添加图像ROI
 
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_DeleteImageROI", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_DeleteImageROI(IntPtr deviceHandle, int roiIndex); //删除图像ROI
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetROICodeNum", CharSet = CharSet.Ansi)] //设置指定 ROI 的码数目
        public static extern long IDDevice_SetROICodeNum(IntPtr deviceHandle, int roiIndex, int codeNum);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_ModifyImageROI", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_ModifyImageROI(IntPtr deviceHandle, int roiIndex, IDPoint topLeftPoint, IDPoint bottomRightPoint);//更新图像ROI
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetImageROIsLength", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetImageROIsLength(IntPtr deviceHandle);//获取图像ROI列表长度
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetImageROIsInfo", CharSet = CharSet.Ansi)]
        public static extern IDImageROI IDDevice_GetImageROIsInfo(IntPtr deviceHandle, uint index);//获取图像ROI
 
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_ClearImageROI", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_ClearImageROI(IntPtr deviceHandle);//清除所有图像ROI
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_AddCodeType", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_AddCodeType(IntPtr deviceHandle, IDCodeType type);//添加码制
 
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_DeleteCodeType", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_DeleteCodeType(IntPtr deviceHandle, IDCodeType type);//删除码制
 
        /**
        * @brief clearCodeType                清除所有码制
        * @return                            错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_ClearCodeType", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_ClearCodeType(IntPtr deviceHandle);
 
        /**
          * @brief getImageROIs                获取码制信息列表长度
          * @param
          * @return                             获取码制信息列表长度
          */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetCodeTypesLength", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetCodeTypesLength(IntPtr deviceHandle);
 
        /**
          * @brief getImageROIs               获取码制信息
          * @param index                    第几个IDCodeType_C信息
          * @return                            IDCodeType_C
          */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetCodeTypesInfo", CharSet = CharSet.Ansi)]
        public static extern IDCodeType IDDevice_GetCodeTypesInfo(IntPtr deviceHandle, uint index);
 
 
        /**
        * @brief setCodeCategoryParam       设置条码算法参数
        * @param codeType                    条码类型
        * @param codeParam                    条码参数信息
        * @return                            错误码
*/
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetCodeCategoryParam", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_SetCodeCategoryParam(IntPtr deviceHandle, IDCodeCategory codeType, IntPtr codeParam);
 
 
 
        /**
         * @brief getSolutionImageParams        获取当前方案图像设置页参数
         * @param solutionImage                图像页参数 //图像参数
         * @return                            错误码
         */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetSolutionImage", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetSolutionImage(IntPtr deviceHandle, ref IDSolutionImage solutionImage);
 
        /**
         * @brief getSolutionImageParams        获取图像参数组部分参数
         * @param solutionImageParams                图像参数组部分参数
         * @param index                                    参数组第几个参数
         * @return                            错误码
         */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetSolutionImageParams", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetSolutionImageParams(IntPtr deviceHandle, int index, ref IDSolutionImageParams solutionImageParams);
 
 
        /**
         * @brief getSolutionImageParams        获取图像光源通道参数
         * @param solutionImageParams            图像参数组部分参数
         * @param index                            参数组第几个参数
         * @param illIndex                        参数组第几个参数的第几个光源通道参数
         * @return                                错误码
         */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetSolutionImageIlluminant", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetSolutionImageIlluminant(IntPtr deviceHandle, int index, int illIndex, ref IDSolutionImageIlluminant solutionImageIlluminant);
 
 
        /**
        * @brief appendLastImageParam        基于最后一个参数节点新增图像参数组
        * @return                            错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_AppendLastImageParam", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_AppendLastImageParam(IntPtr deviceHandle);
 
        /**
        * @brief deleteImageParamAtIndex    删除图像参数组
        * @param paramIndex                    参数组序号
        * @return                            错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_DeleteImageParamAtIndex", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_DeleteImageParamAtIndex(IntPtr deviceHandle, int paramIndex);
 
 
        /**
        * @brief setAutoExposureEnabled        设置使能自动曝光
        * @param enabled                    是否启用自动曝光,`true` 为启用,`false` 为禁用
        * @return                            错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetAutoExposureEnabled", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_SetAutoExposureEnabled(IntPtr deviceHandle, bool enabled);
 
        /**
        * @brief getExposure                获取当前曝光
        * @param exposure                    曝光值
        * @return                            错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetExposure", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetExposure(IntPtr deviceHandle, ref double exposure);
 
        /**
        * @brief setAutoGainEnabled            设置使能自动增益
        * @param enabled                    是否启用自动增益,`true` 为启用,`false` 为禁用
        * @return                            错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetAutoGainEnabled", CharSet = CharSet.Ansi)]
 
        public static extern long IDDevice_SetAutoGainEnabled(IntPtr deviceHandle, bool enabled);
 
        /**
        * @brief getGainCount                获取增益列表个数
        * @param count                        增益列表个数
        * @return                            错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetGainCount", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetGainCount(IntPtr deviceHandle, ref int count);
 
        /**
        * @brief getGain                    获取当前增益
        * @param gain                        增益
        * @return                            错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetGain", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetGain(IntPtr deviceHandle, ref int gain);
 
        /**
        * @brief getGain                    获取当前增益
        * @param paramIndex                    参数组
        * @param gain                        增益值
        * @return                            错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetGain_1330", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetGain_1330(IntPtr deviceHandle, int paramIndex, ref double gain);
 
        /**
        * @brief getGain                    获取增益列表中指定下标对应的增益值
        * @param index                        增益值在列表中的索引
        * @param gain                        增益值
        * @return                            错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetGainValueByIndex_1330", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetGainValueByIndex_1330(IntPtr deviceHandle, int paramIndex, ref double gain);
 
        /**
        * @brief getGamma                    获取当前伽马
        * @param gamma                        伽马值
        * @return                            错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_GetGamma", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_GetGamma(IntPtr deviceHandle, ref double gamma);
 
        /**
        * @brief setDIParam                    设置DI参数
        * @param pin                        引脚编号
        * @param params                        DI参数信息
        * @return
        */
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetDIParam", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_SetDIParam(IntPtr deviceHandle, uint pin, ref IDDIParams iDDIParams);
 
 
        /**
        * @brief setDOParam                    设置DO参数
        * @param pin                        引脚编号
        * @param params                        DO参数信息
        * @return
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDDevice_SetDOParam", CharSet = CharSet.Ansi)]
        public static extern long IDDevice_SetDOParam(IntPtr deviceHandle, uint pin, IDDOParams iDDOParams);
 
 
 
        /*
        * @brief getIOConfigAllParams        获取所有IO输入参数信息长度
        * @
        * @
        * @return
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "getIOConfigInputParamsLength", CharSet = CharSet.Ansi)]
        public static extern long getIOConfigInputParamsLength(IntPtr deviceHandle);
 
        /*
        * 获取IO输入参数信息
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "getIOConfigInputParamsInfo", CharSet = CharSet.Ansi)]
        public static extern long getIOConfigInputParamsInfo(IntPtr deviceHandle, uint index, ref IDDIParams IDDIParams);
 
        /* @brief getIOConfigAllParams        获取所有IO输出参数信息长度
        * @
        * @
        * @return
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "getIOConfigOutputParamsLength", CharSet = CharSet.Ansi)]
        public static extern long getIOConfigOutputParamsLength(IntPtr deviceHandle);
 
        /**
       * @brief addDOParam                                        添加DO参数
       * @param params                                                DO参数信息
       * @return
       */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "addDOParam", CharSet = CharSet.Ansi)]
        public static extern long addDOParam(IntPtr deviceHandle, ref IDDOParams iDDOParams);
 
        /*
        * 获取IO输出参数信息
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "getIOConfigOutputParamsInfo", CharSet = CharSet.Ansi)]
        public static extern long getIOConfigOutputParamsInfo(IntPtr deviceHandle, uint index, ref IDDOParams IDDOParams);
 
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_ResultNotify_")]
        public static extern void IDCallback_ResultNotify_(IntPtr deviceHandle, IntPtr resCallback);   // 结果回调函数
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_ResultNotify_Image_")]
        public static extern void IDCallback_ResultNotify_Image_(IntPtr deviceHandle, IntPtr resCallback); // 图片回调函数
        //[DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDDecodeInfo")]
        //public extern static IntPtr IDCallback_GetIDDecodeInfo(IntPtr decodeInfoHandel);  //IDCallback_GetIDDecodeInfo
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDDecodeInfo_A")]
        public extern static long IDCallback_GetIDDecodeInfo_A(IntPtr decodeInfoHandel, ref IDDecodeInfo info);  //IDCallback_GetIDDecodeInfo
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDDecodeROIInfo", CharSet = CharSet.Ansi)]
        public static extern IDDecodeROIInfo IDCallback_GetIDDecodeROIInfo(IntPtr decodeInfoHandel, uint index);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDDecodeResult", CharSet = CharSet.Ansi)]
        public static extern IDDecodeResult IDCallback_GetIDDecodeResult(IntPtr decodeInfoHandel, uint decodeROIInfoIndex, uint index);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDDMCodeResult", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_GetIDDMCodeResult(IntPtr decodeInfoHandel, uint decodeROIInfoIndex,                            //DM解码数据
             uint index, ref IDDMCodeResult IDDMCodeResultData);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_CheckDeCodeTypeResult", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_CheckDeCodeTypeResult(IntPtr decodeInfoHandel, uint decodeType, uint decodeROIInfoIndex); //详细码类型的结果长度 ,0表示没有解码结果,-1 表示roi不存在 
 
        //[DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetID_QRODE_Result", CharSet = CharSet.Ansi)]
        //public static extern long IDCallback_GetID_QRODE_Result(IntPtr decodeInfoHandel, uint decodeROIInfoIndex,                           //QR解码数据
        //     uint index, ref IDQRCodeResult iDQRCodeResult);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDDMCodeResult_QualityDM15415", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_GetIDDMCodeResult_QualityDM15415(IntPtr decodeInfoHandel, uint decodeROIInfoIndex,             //15414dm码质量
            uint index, ref IDQualityDM15415 iDQualityDM15415);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDDMCodeResult_QUALITY_DM_29158", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_GetIDDMCodeResult_QUALITY_DM_29158(IntPtr decodeInfoHandel, uint decodeROIInfoIndex,           //29158dm码质量
            uint index, ref IDQualityDM29518 iDQualityDM29518);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDPDF417CodeResult", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_GetIDPDF417CodeResult(IntPtr decodeInfoHandel, uint decodeROIInfoIndex,
            uint index, ref IDPDF417CodeResult iDPDF417CodeResultData);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetID_QR_CODE_Result", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_GetID_QR_CODE_Result(IntPtr decodeInfoHandel, uint decodeROIInfoIndex,
            uint index, ref IDQRCodeResult iDQRCodeResult);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetID_QR_CODE_Result_IDQualityQR15415", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_GetID_QR_CODE_Result_IDQualityQR15415(IntPtr decodeInfoHandel, uint decodeROIInfoIndex,        //15414qr码质量
            uint index, ref IDQualityQR15415 iDQualityQR15415);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetID_QR_CODE_Result_IDQualityQR29518", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_GetID_QR_CODE_Result_IDQualityQR29518(IntPtr decodeInfoHandel, uint decodeROIInfoIndex,        //29518qr码质量
            uint index, ref IDQualityQR29518 iDQualityQR29518);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDPDF417CodeResult_IDQualityPDF417_15415", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_GetIDPDF417CodeResult_IDQualityPDF417_15415(IntPtr decodeInfoHandel, uint decodeROIInfoIndex,
            uint index, ref IDQualityPDF417_15415 iDQualityPDF417_15415);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDBarCodeResult", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_GetIDBarCodeResult(IntPtr decodeInfoHandel, uint decodeROIInfoIndex,
             uint index, ref IDBarCodeResult iDBarCodeResultData);
 
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDBarCodeResult_IDQuality15416", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_GetIDBarCodeResult_IDQuality15416(IntPtr decodeInfoHandel, uint decodeROIInfoIndex,
            uint index, ref IDQuality15416 iDQuality15416);
 
        /*
        * decodeInfoHandel 句柄
        * decodeType 解码类型 比如 1dm ,2 qr,3 pdf417,4 barcode
        * decodeROIInfoIndex roi 第几个roi
        * index 第几个具体解码类型结果
        * pointIndex第几个点
        * Position 点数据
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDCallback_GetIDResultPosition", CharSet = CharSet.Ansi)]
        public static extern long IDCallback_GetIDResultPosition(IntPtr decodeInfoHandel, uint decodeType, uint decodeROIInfoIndex,
            uint index, uint pointIndex, ref IDPoint iDPoint);
 
        /**
        * @brief IDVIEWER_Init 使用SDK其他功能前需要先调用该初始化方法
        * @return 错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVIEWER_Init_", CharSet = CharSet.Ansi)]
        public extern static long IDVIEWER_Init_();
 
        /**
        * @brief IDVIEWER_DiscoveryDevices 扫描设备列表
        * @param deviceList    返回获取的设备列表
        * @param discoveryTime 扫描周期,默认200(单位毫秒)
        * @return 错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVIEWER_DiscoveryDevices_", CharSet = CharSet.Ansi)]
        public extern static IntPtr IDVIEWER_DiscoveryDevices_(uint discoveryTime = 1000);
 
        /**
         * @brief IDVIEWER_GetDevicesLength_ 设备列表长度
         * @param deviceList    返回获取的设备列表长度
         * 
         * @return 长度
         */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVIEWER_GetDevicesLength_", CharSet = CharSet.Ansi)]
        public extern static long IDVIEWER_GetDevicesLength_(IntPtr DevicesList);
 
        /**
         * @brief IDVIEWER_SelectIDDeviceInfo_ 获取某个序号的设备
         * @param DevicesList 当前设备列表指针
         * @param index    设备列表的序号
 
         * @return 设备信息
         */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVIEWER_SelectIDDeviceInfo_", CharSet = CharSet.Ansi)]
        public extern static long IDVIEWER_SelectIDDeviceInfo_(IntPtr DevicesList, ref IDDeviceInfo IDDeviceInfoHandel, uint index);
 
        /**
        * @brief IDVIEWER_SetIP 设置IP 设置IP后需要重新扫描
        * @param deviceInfo 当前设备信息
        * @param iPv4    新的IP地址
        * @param mask    新的MASK地址
        * @param gateway 新的网关地址
        * @param isStatic 是否设置静态IP(false为临时IP)
        * @return 错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVIEWER_SetIP_", CharSet = CharSet.Ansi)]
        public static extern long IDVIEWER_SetIP_(ref IDViewerDefines.IDDeviceInfo deviceInfo, string iPv4, string mask, string gateway, bool isStatic);
 
        /**
        * @brief IDVIEWER_CreateDevice CreateDevice 创建设备
        * @param deviceInfo 当前设备信息
        * @param device 创建的设备指针
        * @return 错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVIEWER_CreateDevice_", CharSet = CharSet.Ansi)]
        public static extern long IDVIEWER_CreateDevice_(ref IDViewerDefines.IDDeviceInfo deviceInfo, ref IntPtr deviceHandle);
 
        /**
         * @brief IDVIEWERreateDevice IDVIEWERreateDeviceBySN 更加SN创建设备
         * @param cameraSN 当前设备SN
         * @param device 创建的设备指针
         * @return 错误码
         */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVIEWER_CreateDeviceBySN_", CharSet = CharSet.Ansi)]
        public static extern long IDVIEWER_CreateDeviceBySN_(string cameraSN, ref IntPtr deviceHandle);
 
        /**
         * @brief IDVIEWERreateDevice IDVIEWERreateDeviceByIP 更加SN创建设备
         * @param cameraIP 当前设备IP
         * @param device 创建的设备指针
         * @return 错误码
         */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVIEWER_CreateDeviceByIP_", CharSet = CharSet.Ansi)]
        public static extern long IDVIEWER_CreateDeviceByIP_(string cameraIP, ref IntPtr deviceHandle);
        /**
        * @brief IDVIEWER_UnInit 使用完SDK后调用释放资源
        * @return 错误码
        */
        [DllImport("IDViewerCSDK.dll", EntryPoint = "IDVIEWER_UnInit_", CharSet = CharSet.Ansi)]
        public static extern long IDVIEWER_UnInit_(IntPtr deviceList);
 
    }
}