[원문] http://digital.ni.com/public.nsf/allkb/70995EC2CA1B523386256DD4004F3DE6

Calling a LabVIEW DLL from a CVI or other C/C++ project

Primary Software: LabVIEW Development Systems
Primary Software Version: N/A
Primary Software Fixed Version: N/A
Secondary Software: N/A

Problem: I compiled a DLL in LabVIEW but I can't figure out how to call it from CVI, Visual C/C++, or other Windows development environment.

Solution: When you build a DLL in LabVIEW, three files are created: the DLL file, a LIB file, and an H file (the C/C++ header file). The DLL file contains the functionality that you programmed in LabVIEW, the LIB file contains a stub for loading and calling the DLL function, and the H file contains a function prototype for calling the function that is contained in the LIB file (which ultimately calls the DLL). To use the code in another environment, you can call the DLL directly using LoadLibrary() and GetProcAddress() functions in the Windows SDK or you can link your project with the LIB file and header file so that you simply call the function by name as though it were already in your project. The latter is the easiest and preferred method for most beginning programmers. To do this:

  • Add the LIB file to your C/C++ project.
  • Include the H file at the top of the source file where you want to call your DLL function by using the #include preprocessor directive.
  • Point your compiler to find other LabVIEW .h files like extcode.h, fundtypes.h, and platdefines.h in the C:\Program Files\National Instruments\LabVIEW\cintools subdirectory. These header files define certain types used by LabVIEW and sometimes passed in and out of LabVIEW code depending on your DLL. If LabVIEW is not installed on the development machine, you will need to copy these .h files from the cintools directory to a location where the development computer can find them.
  • Call the function by its name and parameters as specified in the header file.

Note that the LabVIEW runtime engine includes supporting functions that are required for any code built with LabVIEW and used on another computer. The appropriate version of the runtime engine is required to execute a DLL.

Related Links: KnowledgeBase 28185EQO: LabVIEW Run-Time Engine Requirments for DLL Execution

Attachments:

Report Date: 2003-11-04
Last Updated: 2005-11-05
Document ID: 3337DOV4

[원문] http://www.mylv.net/know_new/view.asp?sDiv=&no=157&page=1&txtsearch=DLL&sltsearch=bstitle
http://zone.ni.com/devzone/cda/tut/p/id/3063

LabVIEW 에서 DLL 작성

LabVIEW Application Builder를 사용하면 VIs에서 공유 라이브러리(DDL)를 생성할 수 있으므로 LabWindows/CVI, Microsoft Visual C++ 및 Microsoft Visual Basic과 같은 텍스트 기반의 프로그래밍 언어를 사용하여 공유 라이브러리의 VI를 호출할 수 있습니다.

참고: LabVIEW Professional Development System은 Application Builder를 포함합니다. LabVIEW Base Package 또는 Full Development System을 사용하는 경우, 아래의 관련 링크를 사용하여 Application Builder를 별도로 구입하실 수 있습니다.

아래 대화상자의 필드 설명을 포함하여 공유 라이브러리 생성에 대한 자세한 내용은Help»Contents and Index를 선택하면 이용 가능한 LabVIEW Help를 참조하십시오.

목차:

 

VI 생성

다음 단계에 따라 화씨 온도를 섭씨 온도로 전환하는 VI를 생성하십시오. VI는 텍스트 기반 프로그래밍 언어에서 쉽게 호출할 수 있습니다.

  1. 다음 방정식을 사용하여 변환을 수행하는 VI를 생성합니다.

Deg C = (Deg F - 32) / 1.8

 

블록다이어그램과 프런트패널은 다음과 같이 나타납니다.


  1. 커넥터 팬(connector pane : 윈도우 우측 상단의 그림에서 오른쪽 마우스 클릭)의 터미널에 컨트롤과 인디케이터를 할당합니다. 이 단계는 DLL을 생성하는 데 필요합니다. 터미널에 컨트롤과 인디케이터 할당하기에 대한 자세한 내용은 Help»Contents and Index를 선택하여 LabVIEW Help를 참조하십시오.
  2. DLL을 생성할 때 VI가 메모리에 있을 수 없으므로 VI를 저장하고 닫습니다.


 

LabVIEW에서 DLL 생성

 

다음 단계에 따라 작성한 VI에서 DLL을 생성합니다.

  1. 새 VI를 열고 Tools»Build Application or Shared Library(DLL)를 선택합니다.
  2. Build Target 필드의 Shared Library(DLL)를 선택하고 DLL과 대상 및 지원 디렉토리를 지정합니다.



  3. Source Files 탭을 클릭하고 Add Exported VI 버튼을 클릭한 다음 주 VI를 더블 클릭합니다. 그러면 다음과 같은 대화상자가 나타납니다.
  4. 입력 파라미터(DegF)를 선택하고 더하기(+) 버튼을 클릭하여 DLL에 입력을 추가합니다. 또한 파라미터를 값 또는 값에 대한 포인터로 전달할지를 선택합니다. 이 경우 Pass By Field에서 Value를 선택합니다. 함수 프로토타입은 대화상자의 하단에서 바뀝니다.


  5. Deg C 출력과 같은 다른 파라미터에 대해 이전 단계를 반복합니다. 이 출력은 기본적으로 포인터로서 전달됩니다.



  6. 또 한 함수의 반환 값으로 출력 파라미터를 선택할 수 있습니다. 다음 함수는 void 대신 DegC 64 비트 부동 소수점 수를 반환합니다. 따라서 함수에서 출력을 생성할 때 두 가지 옵션을 사용할 수 있습니다. 출력 파라미터로 추가하거나 반환할 수 있습니다. 다음 함수는 두 가지를 모두 수행합니다.
  7. Define VI Prototype 대화상자에서 OK 버튼을 클릭합니다  
  8.  Build Application or Shared Library (DLL) 대화상자에서 Build 버튼을 클릭하여 DLL을 생성합니다. LabVIEW는 헤더 및 라이브러리 파일과 함께 대상 디렉토리에 DLL을 생성합니다. 이 예에서 대상 디렉토리는 c:\temp\app입니다.

LabVIEW DLL 호출


Microsoft Visual Basic, Microsoft Visual C++., and LabWindows/CVI에서 이 DLL을 호출하는 방법의 예에 대해서는 다음 링크를 참조하십시오.

See Also:
Calling a DLL from Microsoft Visual Basic That Was Generated By LabVIEW 6i
Calling a DLL from Microsoft Visual C++ that Was Generated by LabVIEW 6i
Calling a DLL from LabWindows/CVI That Was Generated by LabVIEW 6i

Related Links:
LabVIEW Application Builder for Windows
LabVIEW Application Builder for Mac OS
LabVIEW Application Builder for Sun Solaris 2
LabVIEW Application Builder for HP-UX
LabVIEW Application Builder for Linux
[원문] http://zone.ni.com/devzone/cda/tut/p/id/3927

LabVIEW 6i can create DLLs that can be used in other programming environments. This document demonstrates how to use Microsoft Visual C++ to call a simple function in a DLL that was generated by LabVIEW 6i. The first two steps in this process are to create the VI and then create a DLL from LabVIEW 6i. The document linked at the bottom of the page shows how this is done.

1. Open up a new Visual C++ project by selecting File>>Menu and then selecting the Projects tab. Select the Win32 Console Application and enter a project name and location for it to be stored.


[+] 크게 보기

2. Open up a new Visual C++ Source File by selecting File>>Menu and then selecting the Files tab. Select the C++ Source File and enter a file name and location for it to be stored.


[+] 크게 보기

3. Type the source code as shown below. Make sure to include the header file that was created by LabVIEW (Convert_Temp.h). Remember that the function prototype for the DLL that you created was “float64 F_to_C(float64 DegF, float64 *DegC). This code simply calls the temperature conversion VI (F_to_C) and then prints the input (F), output (C), and return (ret) value. Notice that the address of the output (C) must be passed to the function, since it was defined as a Pointer to a Value.



[+] 크게 보기

4. Now add the header file that was created by LabVIEW (Convert_Temp.h) to your project. Select Project>>Add To Project>>Files as shown below.


[+] 크게 보기

5. Select the header file and click OK.




6. Repeat Steps 4 & 5 for the library file (Convert_Temp.lib).




7. Make sure the compiler knows where to locate the header file you added in steps 4 and 5. To let the compiler know where to look for this file, select Tools>>Options from the menu bar.


[+] 크게 보기


8. Select the Directories tab and select Include files in the Show directories for field. If the path where the header file is located is not listed, add it by clicking the dotted box above the Directories box. The header file that was created by LabVIEW references another header file called extcode.h. This header file contains LabVIEW defined datatypes that you need to call the DLL. It is generally located in the LabVIEW file under cintools, as shown below.





9. Your DLL must be in the same folder as the project, so in this case you must move Convert_Temp.dll from C:\TEMP\app\ to C:\TEMP\FtoC\.


[+] 크게 보기

10. You can now compile and build the executable.


[+] 크게 보기


11. Troubleshooting

If you get the following error when you compile, add the path to the header file. See steps 7 & 8.

c:\temp\ftoc\deg.c(2) : fatal error C1083: Cannot open include file: 'Convert_Temp.h': No such file or directory
Error executing cl.exe.


If you get the following error when you try to run the executable, the DLL file is probably not in the same directory as your project. See step 9.



12. Run the executable.



[+] 크게 보기


13. Notice that the 75 degrees Fahrenheit was converted to 23.9 degrees Celsius. Also, notice that the return value is equal to 23.9. This is because you set the return value equal to DegC when the DLL was built in LabVIEW.


[+] 크게 보기



-The link shows how the DLL called in this Microsoft Visual C++ example was created in LabVIEW 6i.
1. "오늘까지"라는 말은 "내일 아침까지"라는 말이다.

2. 프로그램은 내가 원하는대로 움직이지 않는다. 타이핑대로 움직인다.

3. 요구 사양은 프로그램을 완성한 후에 추가된다.
    기본 사양은 완성품을 고객이 보고 나서 결정된다.
    상세 사양은 사용자가 프로그램을 사용해 본 이후에 결정된다.

4. 소프트웨어 설계에는 두 개의 방법이 있다.
   하나는 결함이 있을 수 없을 정도로 단순하게 만드는 방법이다.
   다른 하나는, 분명한 결함을 눈치채기 어려울 정도로 복잡하게 만드는 방법이다.

5. 코드는 개발 현장에서 사용하는 것이 아니라 납품처에서 사용하는 것이다.
    디버그는 납기일까지 하는 것이 아니라, 납품된 이후에 하는 것이다.

6. 프로그래머를 죽이기 위해서는 칼이 필요없다.
   프로그램의 요구조건을 3번만 바꾸면 된다.

7. 다른 사람을 믿으라. 그 사람이 해결해줄지도 모른다.
   주의사항 - 먼저 자신을 의심해라.

8. 개발에 마지막은 없다. 출시만이 있을 뿐이다.

9. 클라이언트의 요구사항이 제 아무리 뒤늦게 추가되어도 납기일은 변하지 않는다.
    이것을「납기 불변의 법칙」이라고 한다.

10. 우리의 고객들은 물과 기능추가를 공짜라고 생각하고 있다.

11. 주머니가 짠 고객일수록 잔소리가 많다.

12. 개발 스케줄은 산수를 무시하며 짜여진다. 영업과는 1+1=2를 이해하지 못하는 사람의 모임이다.

13. 한 명이 쓰러지면 모두가 쓰러진다.

14. 버그가 너무 심하다? 걱정마라. 어느 순간 그것은 기본 사양이 될 것이다.

15. 좋은 설계는 한 명의 천재보다 세 명의 범재를 요구한다.
     나쁜 설계는 백명의 범재보다 한 명의 천재를 요구한다.

16. 고객에게 시스템 엔지니어는 부하이며, 프로그래머는 가축이다.
     시스템 엔지니어에게 고객은 돈이다.
     프로그래머에게 고객은 보이지 않는 악성 바이러스다.

17. 돈과 시간만 있으면, 그 어떤 시스템이라도 만들 수 있다고 생각하는가?
     웃어라. 그 기회는 영원히 주어지지 않는다.

18. 품질은 사양 변경의 수와 규모에 의해, 얼마나 열화될지 결정된다.

19. 영업과는 공상이 실현된다고 생각하는 몽상가이다.
     시스템 엔지니어는 넘을 수 없는 벽이 없다고 믿는 모험가이다.
     프로그래머와는 몽상가와 모험가에 의해 칠흑의 바다에 내던져진 표류자이다.

20. 유능한 프로그래머가 프로그램 설계개념도를 받아들고 최초로 하는 일은, 프로그램의 목적을 이해하는 것이다. 그리고 그 다음으로 하는 일은, 지정된 방법과 시간 안에는
도저히 그 목적을 완수할 수 없다는 사실을 시스템 엔지니어에게 이해시키는 일이다.

21. 프로그램이란, 운과 감에 의해서 작성되는 기적이다.
     운과 감이 없다면, 그 기간 내에 그러한 목표를 실현될 수 있을 리 없다.
     따라서 사양 변경은 기적에 트집을 잡는 건방진 행위이며, 사양 추가는 기적이 두 번 일어날 것으로 믿는 무모한 행위이다.

22. 시스템 엔지니어는 지구력, 프로그래머는 순발력.

23. 정시에 퇴근하면, 일이 늘어난다.

24. 완벽한 프로그램은 완벽한 시간과 돈을 필요로 한다.
     미국의 국가 예산을 무제한으로 사용하는 NASA마저도, 아직 시간과 돈이 부족하다고 한다.

25. 눈으로 훑어볼 틈이 있다면 움직여라. 뇌세포보다 CPU가 더 해석이 빠르다. 그리고, 그 사이, 쉴 수 있다.

26. 불편함을 버그라고 부를 것인가, 사양 상의 제한 사항이라고 부를 것인가는 남겨진 개발일자와 납기일에 의해 결정된다.

27. 정장 대신 캐쥬얼을 입고 출근하는 "캐쥬얼 데이"를 세간에서는 휴일이나 공휴일이라고 부르는 것 같다.

28. 프로그램은 머리로 기억하지 않는다. 몸으로 기억한다.

29. 내일 쉴 수 있다면 오늘 죽어도 괜찮다.

30. 고객은 거짓말을 한다.
     영업은 꿈을 말한다.
     시스템 엔지니어는 공상을 이야기한다.
     프로그래머는 과묵해진다. (혼잣말은 많아진다)

31.「네, 할 수 있습니다」라고 말하기 전에 10초만 곰곰히 다시 생각해보라.

32. 프로그래머는 1분 생각하고 1일을 코딩에 소비한다.
      1시간 생각하고 1시간 코딩하는 대신에 말이다.

33. 납품 이후의 디버그는 버그를 부른다.

34. 세 개의 디버그는 하나의 버그를 낳는다. 이것을 버그의 엔드리스 루프라고 한다.

35. 안 좋은 예감은 반드시 적중한다. 그러나 프로그래머는 그 안 좋은 예감에 반응하지 않는다. 그것은 시스템 엔지니어의 일이다.

36. 아수라장을 해결할 수 있는 방법은 오직, 고객이 돈을 지불하는 것 뿐이다.

37. 아마추어는 버그발견의 천재이다.

38. 아, 그건 마이크로소프트에서만 가능한 주문입니다.

39. 프로그래머가 불만이라고 생각하는 부분은 고객도 반드시 불만이라고 생각한다.

40. 건강하기 때문에, 건강을 해친다.

41. 그건, 당신이 말한 요구조건입니다만.

42. 아, 개발실의 창문은 안 열립니다. 그 이유는 옛날에 한 프로그래머가 그 창문에서···
43. 고객은 최악의 사태를 믿지 않으며, 그 사태에 대한 준비를 악질적인 비용청구라고 생각한다.
시스템 엔지니어는 최악의 사태를 대비하고 준비하려 한다.
프로그래머는 최악의 사태를 누구보다 잘 예상하지만, 무시한다.

44. 만약 다른 직업을 갖게 된다면, 정시퇴근을「도망」이라고 부르지 않는 직업이 좋을 것 같다.

45. 시스템 엔지니어가 프로그래머에게 말하는「상식」은 3시간마다 변한다.

46. 최소한 자기가 쓴 시방서는 읽어주세요.

47. 고객이 시스템 엔지니어에게 사랑받는 방법은, 시스템 개발에는 시간이 곧 돈이라는 사실을 깨닫고 빨리 최종요구조건을 확정하는 것이다.
SE가 고객에게  사랑받는 방법은, 프로그래머에게 미움받는 것이다.

48. 납기일이란, 작업현장이 우리 회사에서 고객의 회사로 바뀌는 날을 의미한다.

49. 가끔 일어나는 버그는 버그가 아니다. 스펙이다.

50. 개발비의 30%는 프로그램의 요구조건을 확정하는데 사용된다.
     개발비의 30%는 프로그램의 요구조건을 변경하는데 사용된다.
     개발비의 30%는 프로그램의 버그를 잡는데 사용된다.
     개발비의 10%만이 프로그램의 개발에 사용된다.
코딩시에 필요한 것들..

1 000000 333333 666666 999999 CCCCCC FFFFFF
2 000033 333300 666600 999900 CCCC00 FFFF00
3 000066 333366 666633 999933 CCCC33 FFFF33
4 000099 333399 666699 999966 CCCC66 FFFF66
5 0000CC 3333CC 6666CC 9999CC CCCC99 FFFF99
6 0000FF 3333FF 6666FF 9999FF CCCCFF FFFFCC
7 003300 336633
669966 99CC99 CCFFCC FF00FF
8 006600 339933 66CC66 99FF99 CC00CC FF33FF
9 009900 33CC33 66FF66 990099 CC33CC FF66FF
10 00CC00 33FF33 660066 993399 CC66CC FF99FF
11 00FF00 330033 663366 996699 CC99CC FFCCFF
12 00FF33 330066 663399 9966CC CC99FF FFCC00
13 00FF66 330099 6633CC 9966FF CC9900 FFCC33
14 00FF99 3300CC 6633FF 996600 CC9933 FFCC66
15 00FFCC 3300FF 663300 996633 CC9966 FFCC99
16 00FFFF 330000 663333 996666 CC9999 FFCCCC
17 00CCCC 33FFFF 660000 993333 CC6666 FF9999
18 009999 33CCCC 66FFFF 990000 CC3333 FF6666
19 006666 339999 66CCCC 99FFFF CC0000 FF3333
20 003333 336666 669999 99CCCC CCFFFF FF0000
21 003366 336699 6699CC 99CCFF CCFF00 FF0033
22 003399 3366CC 6699FF 99CC00 CCFF33 FF0066
23 0033CC 3366FF 669900 99CC33 CCFF66 FF0099
24 0033FF 336600 669933 99CC66 CCFF99 FF00CC
25 0066FF 339900 66CC33 99FF66 CC0099 FF33CC
26 0099FF 33CC00 66FF33 990066 CC3399 FF66CC
27 00CCFF 33FF00 660033 993366 CC6699 FF99CC
28 00CC33 33FF66 660099 9933CC CC66FF FF9900
29 00CC66 33FF99 6600CC 9933FF CC6600 FF9933
30 00CC99 33FFCC 6600FF 993300 CC6633 FF9966
31 009933 33CC66 66FF99 9900CC CC33FF FF6600
32 006633 339966 66CC99 99FFCC CC00FF FF3300
33 009966 33CC99 66FFCC 9900FF CC3300 FF6633
34 0099CC 33CCFF 66FF00 990033 CC3366 FF6699
35 0066CC 3399FF 66CC00 99FF33 CC0066 FF3399
36 006699 3399CC 66CCFF 99FF00 CC0033 FF3366

RGB 색상표 (2)

000000  black
2f4f4f   darkslategray
708090  slategray
778899  lightslategray
696969  dimgray
808080  gray
a9a9a9  darkgray
c0c0c0  silver
d3d3d3  lightgrey
dcdcdc gainsboro
ffffff      white
fff5ee    seashell
fffafa     snow
f8f8ff     ghostwhite
fffaf0     floralwhite
f5f5f5    whitesmoke
f0f8ff     aliceblue
f0ffff     azure
fdf5e6   oldlace
f5fffa     mintcream
ffefd5    papayawhip
ffdab9   peachpuff
faf0e6   linen
eee8aa palegoldenrod
ffe4e1
ffe4b5  moccasin
ffdead  navajowhite
d2b48c tan
f5deb3  wheat
fafad2  lightgoldenrodyellow
ffffe0    lightyellow
fff8dc   cornsilk
faebd7 antiquewhite
f5f5dc   beige
fffacd   lemonchiffon
fffff0     ivory
f0e68c  khaki
e6e6fa  lavender
fff0f5    lavenderblush
ffe4c4 bisque
ffebcd  blanchedalmond
deb887 burlywood
cd853f  peru
00ced1 darkturquoise
00bfff   deepskyblue
7fffd4  aquamarine
1e90ff  dodgerblue
00ffff   cyan
f0fff0   honeydew
87cefa lightskyblue
afeeee paleturquoise
e0ffff    lightcyan
add8e6 lightblue
b0c4de lightsteelblue
40e0d0 turquoise
48d1cc mediumturquoise
00ffff    aqua
7b68ee  mediumslateblue
191970  midnightblue
6495ed cornflowerblue
0000cd mediumblue
6a5acd slateblue
4682b4 steelblue
0000ff   blue
483d8b darkslateblue
5f9ea0  cadetblue
87ceeb skyblue
4169e1 royalblue
b0e0e6 powderblue
000080 navy
00008b darkblue
8a2be2 blueviolet
8b008b darkmagenta
9932cc darkorchid
9400d3 darkviolet
ff00ff    magenta
ff00ff    fuchsia
c71585 mediumvioletred
ba55d3 mediumorchid
9370db mediumpurple
dc143c crimson
ff1493 deeppink
ffb6c1 lightpink
ff69b4 hotpink
ffc0cb pink
dda0dd plum
800080 purple
ee82ee violet
d8bfd8 thistle
da70d6 orchid
4b0082 indigo
a52a2a brown
e9967a darksalmon
f08080 lightcoral
cd5c5c indianred
ffa07a lightsalmon
db7093 palevioletred
f4a460 sandybrown
fa8072 salmon
ff6347 tomato
ff4500 ornagered
ff0000 red
800000 maroon
8b0000 darkred
b22222 firebrick
d2691e chocolate
8b4513 saddlebrown
a0522d sienna
bc8f8f rosybrown
ff7f50 coral
ff8c00 darkorange
ffa500 orange
b8860b darkgoldenrod
ffd700 gold
ffff00 yellow
7fff00 chartreuse
7cfc00 lawngreen
00ff00 lime
32cd32 limegreen
00ff7f springgreen
3cb371 mediumseagreen
adff2f greenyellow
8fbc8f darkseagreen
90ee90 lightgreen
98fb98 palegreen
9acd32 yellowgreen
2e8b57 seagreen
00fa9a mediumspringgreen
20b2aa lightseagreen
66cdaa mediumaquamarine
228b22 forestgreen
008b8b darkcyan
008080 teal
006400 darkgreen
556b2f darkolivegreen
008000 green
808000 olive
6b8e23 olivedrab
bdb76b darkkhaki
daa520 goldenrod

아래 내용을 진행해 주세요.

1. 컴퓨터를 안전모드로 부팅해 주세요.
안전모드 부팅은 컴퓨터를 껐다가 키면서 켜지자 마자 f8 키를 계속 탁탁탁 눌러주시면 메뉴가 나옵니다.
안전모드를 선택해서 엔터 쳐 주세요. 마우스는 되지 않고 키보드 위아래 키만 가능합니다.
운영체제는 기본으로 선택되는 것으로 엔터 한번 다시 쳐주세요.
부팅이 되면 로그인을 진행해서 바탕화면 나오도록 합니다.

2. 내컴퓨터를 두번 클릭해서 열어줍니다.

3. C:\Windows\SoftwareDistribution 을 찾아서 이름을 변경합니다.
ex)
SoftwareDistribution.old ...

4. 컴퓨터를 재부팅해서 업데이트를 다시 진행해 봅니다.

증상이 동일할 경우 다음을 진행해 주세요.

* 서비스 목록 확인 *
1.
제어판 - 관리도구 - 서비스 를 선택합니다.
2.
오른쪽 화면에서 automatic windows update 서비스와, Background Intelligent Transfer Service 가 상태가 시작으로 되어 있는지 확인하고 아무런 표시가 없으면 두번 클릭한뒤에 나오는 창에서 시작을 눌러줍니다.
3. PC
를 재부팅 해서 동일할 경우 다음 단계를 진행합니다.

* 업데이트 파일 복구 *
1.
시작 - 실행 창에서 아래를 한줄씩 입력해서 실행합니다.
1) regsvr32 msxml.dll
2) regsvr32 msxml2.dll
3) regsvr32 msxml3.dll
4) regsvr32 wuapi.dll
5) regsvr32 wuaueng.dll
6) regsvr32 wuaueng1.dll
7) regsvr32 wucltui.dll
8) regsvr32 wuweb.dll
9) regsvr32 wups.dll

2.
재부팅후 증상을 확인합니다.

동일증상이면 아래의 사항을 확인해주십시요.

1.서비스에서 해당 서비스 시작 후 확인
시작-제어판-관리도구-서비스 에서 Cryptographic서비스를 시작으로 설정합니다.
2.
동일할 경우 C:\windows\System32\Catroot2 폴더로 이동해서Catroot2 폴더를 제거하거나
다른 이름으로 변경 후 다시 윈도우즈 업데이트 설치하면 정상 설치되는지 확인합니다.
                                                                                                                                                                                                   
C++컴파일러의 모든 에러와 경고의 리스트(2500 ~ 2599)
                                                                                                                                                                                                
E2500 __declspec(selectany)  (은)는 외부로부터 참조 가능한 변수를 초기화하고 있을 때만 지정할 수 있습니다
__declspec(selectany)  (은)는, 정적 변수, 초기화되어 있지 않은 변수등과 함께 사용할 수 없습니다.

E2501
임포트 파일 'filename'를 열수 없다

이 에러가 발생하는 것은, 다음의 코드를 사용했을 때에,
#import "somefile.h"

임포트 하는 파일이 존재하지 않는지, 컴파일러가 파일을 찾아낼 수 없는 경우입니다.

E2502 #import의 해결 에러: problem여기서, problem, #include( see page 236)   의 다양한 속성에 관한 다음과 같은 문제입니다.

unexpected import directive value attribute 'attribute'나타난 속성에 대해서 값이 제공함missing ') ' in import directive attribute 'attribute'나타난 속성의 값이 올바르게 지정되어 있지 않습니다. 닫아 외모가 없습니다.

unrecognized import directive attribute 'attribute'나타난 토큰은, #import 지령

invalid values for raw_property_prefixes attribute raw_property_prefixes

unexpected duplicate property 'property'나타난#import 속성이 여러 차례 지정되어 있습니다. 이것은 unexpected duplicate get method for property 'property'나타난 프롭퍼티의 취득 메소드 unexpected duplicate put method for property 'property'나타난 프롭퍼티의 삽입 메소드 unexpected duplicate put-reference method for property 'property'나타난 프롭퍼티의 참조 삽입 메소드가 여러 차례 지정되어 있습니다.

no return value specified for property get method 'method'나타난 프롭퍼티 취득 메소드가 올바른 반환값의 형태를 제공하지 않습니다.

no return value specified for property put method 'method'나타난 프롭퍼티 삽입 메소드가 올바른 반환값의 형태를 제공하지 않습니다.

could not load type library in 'filename'나타난 타입 라이브러리를 열지 않았습니다.

could not obtain type library name 컴파일러는 현재의 타입 라이브러리의 라이브러리 명을 취득할 수 없었습니다 관련 링크 #include

E2504 'dynamic'는 비템플릿 멤버 함수에게만 사용할 수 있다
템플릿 멤버 함수로 동적 함수를 사용하려고 했습니다. 동적 함수는, TObject로부터 파생한 클래스에서 사용할 수 있습니다. 동적 함수는, 하위 오브젝트가 아니고, 동적 함수를 정의하는 각 오브젝트로 1 슬롯을 점유 합니다. , 동적 함수는, 공허한 가상 테이블에 격납되는 가상 함수입니다. 동적 함수를 호출했지만, 그 함수가 오브젝트내에서 정의되어 있지 않은 경우는, 그 함수가 발견될 때까지 상위 오브젝트의 가상 테이블이 검색됩니다.
 
E2505 명시적인 인스턴스화에는 엄밀형 지정자(elaborated type specifier )가 필요
(예를 들어"class foo<int>")
다음에 나타내는 코드는 부정합니다.
template <class T> class foo;
template foo< int >;  // 'class'키워드가 없습니다 관련 링크 암묵적 및 명시적인 템플릿 함수

E2506 'specifier'의 명시적인 특화가 애매.
템플릿 인수가 필요 다음의 코드에서는, 명시적인 템플릿 인수가 필요합니다.

template <class T> void foo(T);
template <class T> void foo(T *);
template <> void foo( int *);  //
에러. 'foo<int>' 또는 'foo<int *>'를 지정할 필요가 있습니다

E2507 'class'가'class'의 직접 기본 클래스가 아니다

최초의 형태가 2번째의 형태의 직접적인 기본 클래스가 아닙니다. 직접적인 기본 클래스란, 그 클래스의 서브 클래스로부터가 아니고, 그 클래스로부터 직접 파생하고 있는 것을 의미합니다.

E2509 값이 범위를 벗어남

인라인 어셈블러가 식의 하나로 수치 오버플로우를 검출했습니다. 모든 수치가 32비트에 들어가도록 해 주세요.

E2510 오퍼랜드 사이즈가 일치하고 있지 않다

이 항목의 도움말은 없습니다.

E2511 “n”행의 종료되지 않은 매크로 인수

“n” 행으로 개시된 매크로 인수가 올바르게 종료하고 있지 않습니다.

E2512 함수'function'의 반환형(return type)의 RTTI를 생성할 수 없다

컴파일러가 함수의 반환값의 형태에 관한 RTTI 정보를 생성할 수 없는 경우는, 이 에러가 발생합니다.
자세한 것은, 실행시 형 정보를 참조해 주세요.

E2513 인수 'parameter' 함수 'function’ 의 RTTI를 생성할 수 없다

컴파일러가 파라미터의 반환값의 형태에 관한 RTTI 정보를 생성할 수 없는 경우는, 이 에러가 발생합니다. 자세한 것은, 실행시 형 정보를 참조해 주세요.

E2515 generic 템플릿 클래스의 멤버는 명시적으로 특화할 수 없다

범용 템플릿으로부터 특화된 멤버를 작성하려고 하고 있습니다. 예를 들어, 다음의 코드는 부정합니다.

 template <typename T>
class foo
{
    template <typename U>
   
class bar
    {
     };
};
template <typename T>
template <>
class foo<T>:: bar< char > {

};

이 예의 2번째의 선언은 에러입니다. 이것은, foo<T> 안에서 bar<char> ()를 명시적으로 특화하고 있기 (위해)때문입니다.

E2522 non const 함수 ‘function’ 이 const 오브젝트를 호출

데이터형이 일치하지 않기 때문에, 잘못된 함수 호출이 되어 있습니다.

불려 가는 오브젝트(const 함수), const 오브젝트가 아니면 안됩니다.

E2523 비휘발성 함수 ‘name’이 휘발성(volatile) 오브젝트를 호출데이터형이 일치하지 않습니다.

이것은, 잘못된 함수 호출입니다. 불려 가는 오브젝트(volatile 함수), volatile 오브젝트가 아니면 안됩니다.

E2525 xstring를 인클루드 해 이 기능을 사용하기 전에, PCH_STATIC_CONST를 정의할 필요가 있습니다

Dinkumware 표준 C++라이브러리에 포함되는 xstring로 정의되고 있는 기능을 사용하려고 했습니다. 헤더에 정수(xstri ng로 정의되고 있다)가 있기 위해, C++컴파일러는 프리컴파일이 끝난 헤더를 생성할 수 없었습니다. xstring를 인클루드 하는 경우는, 최초로 define _PCH_STATIC_CONST를 설정할 필요가 있습니다.


E2526 프롭퍼티'name'가 취득 메소드와 설정 메소드로서 다른 프롭퍼티를 사용하고 있습니다(이것은 허용되지 않음)통상, 프롭퍼티는 취득 메소드와 설정 메소드의 양쪽 모두를 가집니다. 다만, 다른 프롭퍼티의 취득 메소드나 설정 메소드로서의 역할을 완수할 수 없습니다.

E2527 옵션'name''name'에 의해서 설정할 수 없습니다파일의 해석 또는 컴파일이 시작된 후에는 설정할 수 없는 옵션을, 원시 파일 내에서 설정하려고 하고 있습니다. 이 옵션은, 커멘드 라인, 또는. cfg 파일로 설정해 주세요. 예를 들어, 원시 파일에, #pragma option push -v 가 포함되어 있는 경우는, push를 삭제하고, 커맨드 라인 또는. cfg 파일로, 이 옵션의 set/unset를 실시할 필요가 있습니다.

E2528 옵션'name'는 컴파일이 시작되기 전으로 설정할 필요가 있습니다컴파일이 시작되기 전으로 설정할 필요가 있는 옵션을, 원시 파일 내에서 설정하려고 하고 있습니다. 이 옵션은, 커맨드 라인,. cfg 파일, 또는 원시 파일의 선두(int foo();    행의 앞)으로 설정해 주세요.

E2529 패스'path'가 최대 사이즈'n'를 넘고 있습니다
include 파일을 검색할 때에, C++컴파일러는, Windows로 용서되고 있는 문자수보다 긴 패스명을 가지는 파일을 검출했습니다. 짧은 패스명으로 변경해 주세요.

'1.소프트웨어 이야기 > 10.번역 작업' 카테고리의 다른 글

VCL 에러메시지 2400 ~ 2499  (0) 2008.01.25
VCL 에러메시지 2300 ~ 2399  (0) 2008.01.25
VCL 에러메시지 2200 ~ 2299  (0) 2008.01.25
                                                                                                                                                                                                   
C
++
컴파일러의 모든 에러와 경고의 리스트(2400 ~ 2499)
                                                                                                                                                                                                 

E2472 인스턴스화에 의해서 멤버 함수를 선언할 수 없다템플릿 클래스내의 선언이 템플릿 파라미터에 의존하는 형태를 통해서 함수형을 받기 위해, 함수 선언자의 올바른 구문을 사용해 함수형을 받지 않는 선언이 되는 경우, 이 프로그램의 형식은 부정합니다. 예를 나타냅니다.
template <class T>
struct A {
static T t;
};

typedef int function();

A<function> a;  //에러:  A<function>:: t//정적 멤버 함수로서 선언됩니다 다른 예를 나타냅니다.

다음의 예에서는, 템플릿 멤버'a''T'형태입니다. 이 템플릿이 함수형으로서 T로 인스턴스화 되면, 'a '는 멤버 함수이게 됩니다. 이것은 허가되지 않고, 이 에러 메세지가 표시됩니다.
template <T& x> class foo { T a;  }
int func( int );
template class foo<func>;

E2474 'function'는 정적 또는 인 라인 해 선언할 수 없다심볼을 정적 또는 인 라인으로서 선언하려고 했습니다만, 이 형태의 심볼을 정적 또는 인 라인으로서 정의할 수 없습니다. 'main', 'WinMain'등의 함수는, 정적 또는 인 라인으로서 선언할 수 없습니다. 'main'는 콘솔 프로그램의 엔트리 포인트이며, 'WinMain' Windows 어플리케이션의 엔트리 포인트입니다.

예를 들어, 이 에러는, 다음의 경우에 표시됩니다. 

static int main()    //이것은 에러가 됩니다
{}

또는
inline int main()  { return 0;  }

E2475 'function'는 템플릿 함수에는 할 수 없다'main', 'WinMain'등의 함수는, 템플릿 함수로서 선언할 수 없습니다. 'main'는 콘솔 프로그램의 엔트리 포인트이며, 'WinMain' Windows 어플리케이션의 엔트리 포인트입니다.

예)
template <class T> int main()    //
이것은 에러가 됩니다
{}

관련 링크
functiontemplates.xml

E2480 복잡한 부분 특화의 인수에 템플릿 파라미터를 넣을 수 없다 
단지 템플릿 파라미터를 직접 참조하지 않는 한, 부분 특화에서는, 값이 아닌 인수식에서 다른 템플릿 파라미터를 참조할 수 없습니다. 예를 나타냅니다. 
template<int A, int B, int C> class foo;
template<int A> class foo<A+5, A, A+10>;
이 부분 특화에는 부정한 인수가 2개 있습니다. 'A'를 단순한 직접 인수로서 사용하고 있지 않기 때문에, 'A+5'는 복잡한 식입니다. 2
차례째의 인수의 단순한'A'의 참조는 유효합니다. 다만, 3번째의 인수는, 복잡한 방법으로'A'를 참조하고 있기 때문에, 역시 부정합니다.

E2481 예기치 않은 문자열 정수 
컴파일러가 소스 입력으로의 문자열 정수의 출현을 예기치 않은 경우가 있습니다. 예를 나타냅니다. 
class foo { "Hello";  };

E2482 문자열 정수가 필요 
컴파일러는, 이 정도치에 문자열 정수를 예상했습니다만, 문자열 정수를 받지 않았습니다.
컴파일러는, 이 에러를 생성하지 않게 되었습니다.

E2483 배열의 차원 'specifier'를 판정할 수 없다
형태의 인스턴스화 중에 배열의 차원을 계산할 수 없는 경우는(통상, 보고되는 것 외의 에러가 원인으로 발생), 이 에러가 발생합니다. 예를 들어, 배열의 차원이 템플릿의 파라미터에 의존하고 있지만, 파라미터의 해석 중에 에러가 발생해, 치환되는 템플릿 인수가 유효한 정수식이 되지 않는 경우는, 이 에러가 표시됩니다.

E2488 토큰 응답 심도의 상한을 초과했다:재귀를 체크해 주세요
이 에러는, 재귀적인 템플릿의 인스턴스화가 너무 깊은 것을 나타냅니다. 프로그램에 컴파일시의 재귀 처리가 있는지 없는지를 확인해, 어느 256 레벨 이하에 억제해 주세요.

E2489 옵션 문맥 응답 심도의 상한을 초과: 재귀를 체크해 주세요
이 에러는, 재귀적인 템플릿의 인스턴스화가 너무 깊은 것을 나타냅니다.
프로그램에 컴파일시의 재귀 처리가 있는지 없는지를 확인해, 어느 256 레벨 이하에 억제해 주세요.

E2491 최대 VIRDEF수를 초과했다: 재귀를 체크해 주세요
할당할 수 있었던 VIRDEF 심볼이 너무 많습니다. 컴파일러는, 변환 유닛 마다 사용할 수 있는 VIRDEF의 수를 제한하고 있습니다. 현재, VIRDEF의 제한은 16384입니다.
예를 들어, 프로그램에 16384개를 넘는 함수가 있으면, 이 에러가 발생합니다.

E2493 부정한 GUID 문자열
GUID 문자열이 글로벌 유니크 식별자(GUID)의 형식이 아닙니다.

E2494 인식할 수 없는 __declspec 수식자
무효인 _declspec 수식자가 지정되었습니다.

E2495 uuid의 재정의가 동일하지 않다 
구조체에 아탓치 되는 GUID는, 같은 구조체의 복수의 선언 및 정의동안에서 같은 필요가 있습니다. 따라서, 다음의 예는 이 에러를 생성합니다. 
class __declspec(uuid("19 a76fe0-7494-11 d0-8816-00 a0c903b83c"))  foo;
class __declspec(uuid("00000000-7494-11 d0-8816-00 a0c903b83c"))  foo{}

E2496 무효인 uuidof(구조 체형| 변수)의 호출
uuidof 연산자에 부정한 인수가 지정되었습니다.

E2497 형'type'에 GUID를 관련 지을 수 있지 않았다
GUID가 필요한 상황으로 변수 또는 형태가 사용되었습니다만, 형태에 관련지을 수 있고 있는 GUID가 없습니다. GUID, _declspec (uuid(GUID))  ()를 사용하고 형태에 관련 지을 수 있습니다.

E2498 정의 끝난 구조체 GUID가 필요
GUID 구조체를 정의하는 헤더를 삽입하지 않고__uuidof 연산자를 사용하면, 이 에러가 발생합니다. 따라서, 다음의 프로그램 코드는 이 에러가 됩니다. 

class __declspec (uuid("19 a76fe0-7494-11 d0-8816-00 a0c903b83c"))  foo{};
int main()
{
    __uuidof(foo);
    return 0;
}

이 코드는 다음과 같이 수정할 수 있습니다.
# include <windows.h>      //
구조체의 GUID가 인클루드 됩니다
class __declspec (uuid("19 a76fe0-7494-11 d0-8816-00 a0c903b83c"))  foo{};
int main()
{
    __uuidof(foo);
    return 0;
}

E2499 무효인__declspec(uuid(Guig) )  형식
잘못된 형식을 사용해 GuidString를 정의하면, 이 에러가 발생합니다. 구조체의 GUID는 다음과 같이 정의됩니다.
class __declspec (uuid("19 a76fe0-7494-11 d0-8816-00 a0c903b83c"))  foo{};

예를 들어, 다음의 코드를 사용하면, 이 에러가 발생합니다. 

class __declspec (uuid(19 a76fe0-7494-11 d0-8816-00 a0c903b83c)) foo{};   //인용부호가 없습니다 또는 class __declspec (uuid"7494-11 d0-8816-00 a0c903b83c"))  foo{};  //왼쪽이나 고화 없습니다


 

+ Recent posts