'프로그래밍'에 해당되는 글 64건

  1. 2023.11.16 GetRecordCount 리턴값 문제
  2. 2022.04.25 MSSQL 운영체제 오류 5 해결
  3. 2022.04.07 VS2015 갑자기 컴파일 안됨.
  4. 2021.01.09 TIM3, TIM8 PWM 충돌문제.. 1
  5. 2020.10.08 IAR No Valid license found. 1
  6. 2020.09.11 Win7 및 Win10 임베디드OS에서 0xC000007B 발생?
  7. 2017.01.12 SQL 2000 Server에서 새 테이블이 안될때.
  8. 2016.12.10 FTP 명령어 정리
  9. 2016.10.07 코드 요소 xxx가 읽기 전용이므로 추가/제거 작업을 수행할 수 없습니다.
  10. 2016.09.27 C4430 형식 지정자가 없습니다. int 로 가정합니다.
  11. 2016.08.25 Win7 에서 공유폴더 패스워드 없애기.
  12. 2016.08.17 레지스터 읽기 쓰기 삭제~
  13. 2016.08.17 1초 딜레이 함수!
  14. 2016.08.03 예약된 상수를 쓰지말자!
  15. 2016.06.30 readonly 필드 사용법.
  16. 2016.06.30 열거형(Enum) Parse 사용방법.
  17. 2016.06.30 2016년 한해가 가기전에 C# 마스터!!
  18. 2016.06.11 DB SQL JOIN의 종류
  19. 2016.05.17 컴퓨터 켜진 시간 알아내기
  20. 2016.04.06 VS2008에서 LNK2001 오류.
  21. 2016.04.04 라즈베리파이3 발열 문제.
  22. 2016.04.04 MySQL 설치중 용량 부족.
  23. 2016.04.01 라이베리파이3 구입.
  24. 2016.01.20 10054 런타임 오류가 발생했습니다.
  25. 2015.11.26 FTP Command 파일명 변경시 오류.
  26. 2015.11.02 SPI EEPROM AT25040B 데이터 쓰기
  27. 2015.10.15 외부 DLL 참조방법.
  28. 2015.07.02 RichTextBox 색상 변경 및 RTF데이터 분석
  29. 2015.02.02 SSCommand 클릭시 VB6가 닫히는 증상. 2
  30. 2015.01.14 두개의 체크박스를 옵션처럼 쓰기.

아직 파고 들지 않아서 원인은 정확하지 않다.

20년전 VB나 MFC에서 Recordset 을 사용하려면 항상 스트레스였다.

 

CString strSQL = L"SELECT * FROM AreaList";
CRecordset rs(&m_Db);
rs.Open(CRecordset::forwardOnly, strSQL);

 

long cnt = rs.GetRecordCount();
rs.MoveLast();
rs.MoveFirst();
long cnt2 = rs.GetRecordCount();

 

 

테이블 데이터는 3개.

cnt 는 리턴값이 1이고, cnt2 는 리턴값이 3 이다.

 

자료구조를 공부해보면 LIST 라는 형태를 알게된다.

현재의 포지션이 EOF를 모르는 상태와 같다.

그 끝을 향해 이동한뒤에야 아~  여기가 끝이구나.. 하는 듯.

왜 다시 First를 하냐면 첫번째 데이터부터 사용을 하기 위함이다.

Next Next Next... 하면서 데이터를 읽어보자.

Posted by +깡통+

Windows 보안 업데이트 이후에 생긴 문제로 판단된다.

SQL 2008 Express, SQL 2017 Express 를 사용중이며 DB파일을 자주 연결 하는 편이다.

 

mdf, ldf를 연결하려는 순간!

운영체제 오류 5: "5(액세스가 거부되었습니다.)"

구글링 해보니 db파일을 연결할때 sql server가 권한이 없기 때문에 발생하는 듯.

서비스에 로그인 탭에서는 계정지정 NETWORK SERVICE 가 설정되어 있다. 

 

1. 실행 -> services.msc

2. 서비스 메뉴에서 "SQL Server (인스턴스명)" 를 찾아 속성을 확인한다.

3. 로그온 탭에서 "로컬 시스템 계정", "서비스와 데스크톱 상호 작용 허용" 체크.

4. 서비스 다시 시작 또는 재부팅.

 

Posted by +깡통+

갑자기 컴파일이 안되면서 오류가 쏟아진다.

VS2019로 소스를 열어서 업그레이드 했기 때문인듯...

이전에 백업된 자료로 다시 컴파일이 가능하다.  휴~

 

심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태
오류(활성) 파일 소스을(를) 열 수 없습니다. "new.h" LPRx c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h 78
오류(활성) 파일 소스을(를) 열 수 없습니다. "string.h" LPRx c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h 223
오류(활성) 파일 소스을(를) 열 수 없습니다. "stdio.h" LPRx c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h 226
오류(활성) 파일 소스을(를) 열 수 없습니다. "stdlib.h" LPRx c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h 229
오류(활성) 파일 소스을(를) 열 수 없습니다. "time.h" LPRx c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h 232
오류(활성) 파일 소스을(를) 열 수 없습니다. "stddef.h" LPRx c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h 238
오류(활성) 파일 소스을(를) 열 수 없습니다. "errno.h" LPRx c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h 244
오류(활성) 파일 소스을(를) 열 수 없습니다. "malloc.h" LPRx c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h 247
오류(활성) 파일 소스을(를) 열 수 없습니다. "crtdbg.h" LPRx c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\afx.h 250

Posted by +깡통+

기록 차원에서 남겨둡니다.

 

STM32F103xC 를 사용했는데 PWM 시그널이 2가지가 필요했습니다.

그런데 TIM3 CH4에서 TIM8 데이터가 나옵니다.

칩 불량인가? 다른 칩에서도 같은 문제가 나오네요.

이 문제로 많은 시간을 허비하며 문제점 파악에 나섰고,

TIM 내부 블럭도와 CubeIDE 에서 실마리를 발견했습니다.

 

문제가 발생한 PWM Pin 을 살펴보는중 Remap 사용시 TIM8 CH3N 을 발견했습니다. 

 

 

 

이 N은 뭐하는 걸까?

PWM 신호를 RS485와 같이 미러신호가 필요할 경우가 있을껍니다. 아니면 똑같은 시그널을요.

어쨌든 PWM 시그널을 다른 포트로 내보낼 수 있습니다. 즉 GPIOC 를 사용하는 TIM8 에서 GPIOB 로 TIM6를 ㅁ

아무튼 코드에서 붉은색 부분이 문제였습니다.

 

  TIM_OCInitTypeDef  TIM_OCInitStructure;
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
  TIM_OCInitStructure.TIM_Pulse = 0;
  TIM_OC3Init(TIM8, &TIM_OCInitStructure);

 

정리하면 타이머 블록을 보면 신호가 분기되어 2곳으로 내보낼수 있습니다.

출력 여부를 결정하는 TIM_OutputState, TIM_OutputNState 의 값을 반드시 지정해야 합니다.

특히 구조체변수 TIM_OCInitStructure 선언시 기본 값이 셋팅되는 것이 아니므로 꼭! 설정값 여부를 지정해야 합니다.

 TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;

이렇게 해주면 TIM3의 CH4 와 TIM8의 CH3N 의 충돌이 해결됩니다.

 

굿밤~!

Posted by +깡통+

오류: "Fatal Error[Cp001]: Copy protection check, No valid license found for this product [24]"

 

해결: Administrator 계정으로 프로그램을 설치해야함.

       Windows7, Windows10 에서 테스트 함.

 

 

Posted by +깡통+

이 게시글은 아주 극소수에게만 적용됩니다.

왜냐하면 오랜시간이 지나면 잊어버리고 또 다시 고생을 하기에 여기에 남겨두는 것이거든요.

 

적용 OS

Windows7 Embedded 

Windows10 Enterprise LTSC 

 

증상 

Visual C++ 6.0 으로 만든 프로그램이 실행될때 0xC0000007B 발생함.

 

원인

프로그램이 실행될때 필요한 Dll 파일들이 부족해서 발생함

FlyCapture와 관련 있음. ( 이 프로그램은 고속 카메라 처리를 위한 응용 프로그램 입니다 )

 

해결방법.

FlyCapture 설치시 Runtime Utility Packages를 추가하여 재설치 필요. (재부팅 필요)

이 다른 에러로 .NetFramework 버전이 안맞다고 자동 다운로드 하는 경우도 있음.

 

이상~

Posted by +깡통+
MSDE을 쓰려다보니

SQL 2000 Server를 쓰게 되었다.


물로 환경적인 부분으로 인하여 당분간은 계속 써야한다.

그러나 XP 시절에 나온 프로그램이라 거기까지..  상위 OS를 지원하지 않는다.

다행히도 Win7 에서 설치가 가능하다.


나는 최근 Win7 자동업데이트를 받았는데 이 후 부터!!!

SQL Enterprise Manager 에서 새 테이블이 안된다.


빈~~  화면으로 아무것도 안된다.  몇시간을 기다려도 안된다. 

테이블 디자인 변경은 가능한데도 ㅠㅠ

왜! 왜! 왜! 왜!~~~!  새 테이블이 안되는지


국내 검색사이트에서 포기하고 구글링을 실시한다.


정답은!!


Here's what I did.

Run Enterprise Manager as administrator

Navigate to a Data Base that you are working on.

Right click on any table that already in the system (Not right click on an empty space).

Left click on New table' and mmc snap-in pop open. It's worked.

Have fun!

(Accidently discovery. I don't khow why).


프로그램을 실행하고

작업하려는 데이터베이스로 이동한뒤

이미 존재하는 테이블에 우클릭(비어있는 공간에서 우클릭을 하지 말라) 하고 새 테이블을 클릭하라..

이런 내용이다.


된다 된다 된다!!!

#2000 새 테이블 창이 안떠요.     #SQL 2000 새 테이블 오류





Posted by +깡통+

FTP는 파일전송규약입니다.

웹호스팅을 하거나 업로드 다운로드 등에 사용됩니다.


보통은 그냥 상용화된 프로그램을 쓰지만..

개발을 하다보면 좀 더 특성화된 프로그램이 필요로 합니다.

그럴 땐.. FTP을 까야죠. 


깊이 깊이 까다보면 아~~~

Socket으로 명령어를 보내고 결과를 읽고~

fopen으로 파일을 열고~  바이너리로 파일을 보내고~

여러가지 경험을 하게 됨과 동시에~

우리가 쓰는 알FTP, FileZiller 등에 위대함을 느끼지요 ㅎㅎ


출처는 위키백과 입니다.


명령어 RFC 설명
ABOR 현재의 파일 전송 중단.
ACCT 계정 정보.
ADAT RFC 2228 인증/보안 데이터
ALLO 파일을 받기 위해 충분한 디스크 공간 할당.
APPE 이어서 추가.
AUTH RFC 2228 인증/보안 구조
CCC RFC 2228 명령 채널 지우기
CDUP 부모 디렉터리로 변경.
CONF RFC 2228 기밀 보호 명령
CWD 작업 디렉터리 변경
DELE 파일 삭제
ENC RFC 2228 개인 정보 보호 채널
EPRT RFC 2428 서버 접속에 필요한 확장 주소 및 포트 지정.
EPSV RFC 2428 확장 수동 모드 들어가기.
FEAT RFC 2389 서버가 추가한 기능 목록 보기
LANG RFC 2640 언어 탐색
LIST 지정한 경우 파일이나 디렉터리 정보를 반환. 지정하지 않은 경우 현재 작업 디렉터리 정보 반환.
LPRT RFC 1639 서버 접속에 필요한 긴 주소 및 목록 지정.
LPSV RFC 1639 긴 수동 모드 들어가기
MDTM RFC 3659 지정한 파일의 마지막으로 수정한 시간 반환
MIC RFC 2228 무결성 보호 명령
MKD 디렉터리 만들기
MLSD RFC 3659 디렉터리의 이름이 지정되면 디렉터리의 내용을 보여줌
MLST RFC 3659 명령 줄에 입력한 데이터만 제공.
MODE 전송 모드 설정 (스트림, 블록, 압축)
NLST 지정한 디렉터리의 파일 이름 목록 반환.
NOOP 동작 안 함 (더미 패킷: 대개 회선이 살아있는지를 살피기 위해 쓰임)
OPTS RFC 2389 기능 옵션 선택.
PASS 암호.
PASV 수동 모드 들어가기.
PBSZ RFC 2228 보호 버퍼 크기
PORT 서버 접속에 필요한 주소 및 포트 지정.
PROT RFC 2228 데이터 채널 보호 수준.
PWD 작업 디렉터리 인쇄. 호스트 컴퓨터의 현재 디렉터리 반환.
QUIT 연결 끊기.
REIN 연결 다시 초기화.
REST 지정한 지점에서 전송 다시 시작.
RETR 파일 복사본 전송
RMD 디렉터리 제거
RNFR 이름 변경 원본 이름
RNTO 이름 변경 대상 이름
SITE 지정한 명령어를 원격 서버로 송신.
SIZE RFC 3659 파일 크기 반환
SMNT 파일 구조 마운트.
STAT 현재 상태 반환.
STOR 데이터 입력 및 서버 쪽 파일로 저장.
STOU 파일을 저만의 방식으로 저장.
STRU 전송 구조 설정.
SYST 시스템 유형 반환.
TYPE 전송 모드 설정 (ASCII/바이너리).
USER 인증 사용자 이름.


https://ko.wikipedia.org/wiki/FTP_%EB%AA%85%EB%A0%B9%EC%96%B4_%EB%AA%A9%EB%A1%9D

Posted by +깡통+

아 놔!

구글신에서 검색해보면 다양한 방법이 있다.

보통은 .ncb 파일을 삭제후 프로젝트를 다시 실행 하라고 하신다.


안된다.


나 같은 경우에는 Project 가 분리되면서 Name 바꿔야 했는데

수작업으로 이리저리 바꾸다가 생긴 현상이다.


컨트롤을 추가하고 마법사를 통해 변수를 선언하려는데 안되는 것이었다. ㅠㅠ


1. .ncb 삭제

2. .h 파일을 이중 호출하는것이 있는지 확인.

3. 이벤트 수동 추가.


여러 방법중 눈에 띄는게 있었으니!


수동으로 이벤트를 추가하는 것이었다.

한번만 해주면 해결이 된다는데 일단 지푸라기 잡는 심정으로 했다.


헤더파일에 추가

afx_msg void OnLButtonDown(UINT nFlags, CPoint point);


소스코드에 추가

void CxxxDlg::OnLButtonDown(UINT nFlags, CPoint point)

{

CDialog::OnLButtonDown(nFlags, point);

}


다이얼로그 속성에 가서 해당 이벤트를 추가하려 하면..

이미 존재하는 거라고 지껄여 준다.


이후~  프로젝트 재실행하면 됨! ㅋㅋ

Posted by +깡통+

VS2008 오류이다.

error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.


헤더파일 중 아래 코드에서 발생했는데 이 소스는 VC 6.0 에서 쓰던것이다.

typedef vector<char*> VEC_COMMAND_RESULT;

typedef std::vector<char*> VEC_COMMAND_RESULT;


추가후 해결 완료됨.

Posted by +깡통+

맨날 까먹고 다녀서.

메모하는 습관 기록하는 습관을 길러야됩니다.

 

Windows 7 공유폴더에 접근하려면 반드시 아이디와 패스워드를 묻습니다.

 

Network and Sharing Center 쪽으로 가셔서~

 

Change advanced sharing settings -> Password protected sharing -> Turn off password protected sharing

 

이렇게 해준다음~

 

공유할때 사용자에 Everyone 을 넣어줘야 합니다~

Posted by +깡통+
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
 
namespace TrayIconRepair
{
    class Program
    {
        static void Main(string[] args)
        {
            string sTemp = DeleteTrayIconRegistry();
            Console.WriteLine("Register clear {0}", sTemp);
            System.Threading.Thread.Sleep(1000);        
        }
        
        public static void WriteRegistry(string _name, string _value)
        {
            RegistryKey regKey = Registry.CurrentUser.CreateSubKey("Software\\Test", RegistryKeyPermissionCheck.ReadWriteSubTree);
            regKey.SetValue(_name, _value, RegistryValueKind.String);
        }
 
 
        public static string ReadRegistry(string _name)
        {
            RegistryKey reg = Registry.CurrentUser;
            reg = reg.OpenSubKey("Software\\Test"true);
            if (reg == nullreturn "";
 
            if (null != reg.GetValue(_name))
            {
                return Convert.ToString(reg.GetValue(_name));
            }
            else
            {     
                return "";
            }
        }
 
        public static void DeleteRegistry()
        {
            Registry.CurrentUser.DeleteSubKey("Software\\Test");
        }
 
        public static string DeleteTrayIconRegistry()
        {
            RegistryKey reg = Registry.CurrentUser.OpenSubKey("Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\CurrentVersion\\Traynotify"true);
 
            if (reg == nullreturn "fail!";
 
            reg.DeleteValue("IconStreams"false);
            reg.DeleteValue("PastIconsStream"false);
 
            return "ok!";
        } 
 
    }

 

 }

cs

 

 

 

Windows7 버전에서 아이콘이 사라져 안보일때가 있다.

이때.. 사용할 소스코드.

 

 

Posted by +깡통+

ms 간격으로 설정 가능하다.

 

System.Threading.Thread.Sleep(1000);

Posted by +깡통+

오늘 또 식겁? 했다.

분명이 두달전에 파생된 펌웨어는 통신이 잘 되는데!!!

원본 펌웨어는 쓰레기 값이 자꾸만 수신된다.

PC에서 송신하면 STM32에서 계속 다른 응답이 전방에 섞여서 왔다.

 

왜! 왜!

 

결국 파생된 소스와 원본을 면밀히 검토한 결과 상수 RESET 의 문제였다.

종종 아래의 코드처럼 KEY 값을 정의한다.  

9번 값이 보이시는가?

특정 조합을 누르면 SoftReset을 하려고 만든게 화근!

 

#define UP      1
#define DOWN    2
#define LEFT    3
#define RIGHT   4
#define ENTER   5
#define CANCEL  6
#define RESET   9

#define ON 1
#define OFF 0

 

9번으로 인하 아래 코드에 영향을 받았다.

따라서 수신 인터럽트를 처리하러 왔다가.

송신까지 건들게 되는게 원인이었다.


void USART2_IRQHandler(void)  // RS232
{
  if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
  {
    /* Read one byte from the receive data register */
    USART_ClearITPendingBit(USART2, USART_IT_RXNE);
    RxBuffer2[RxHead2++] = USART_ReceiveData(USART2);   
    if(RxHead2 == MAX_RX2_BUFFER_SIZE) RxHead2 = 0;
  }
  
  if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET)
  {  
    /* Write one byte to the transmit data register */
    USART_SendData(USART2, TxBuffer2[TxTail2++]);
   
    if(TxTail2 == MAX_TX2_BUFFER_SIZE) TxTail2 = 0;
   
    if(TxTail2 == TxHead2)
    {
      /* Disable the USARTz Transmit interrupt */
      USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
    }
  }
}

 

 

다음에는 같은 실수 반복하지 말자!

Posted by +깡통+
 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ReadOnlyClass
{
    class ReadOnlyClass
    {
        public int x;
        public readonly int y = 1;
        public readonly int z;

        public ReadOnlyClass()
        {
            z = 24;
        }

        public ReadOnlyClass(int x, int y, int z)
        {
            this.x = x;
            this.y = y;
            this.z = z;
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            ReadOnlyClass o1 = new ReadOnlyClass(1, 2, 3);
            Console.WriteLine("o1: x={0}, y={1}, z={2}", o1.x, o1.y, o1.z);

            ReadOnlyClass o2 = new ReadOnlyClass();
            Console.WriteLine("o2: x={0}, y={1}, z={2}", o2.x, o2.y, o2.z);

            o2.x = 5;
            o2.y = 6;
            o2.z = 7;
        }
    }
}


39~40번 라인에 문제가 있다고 컴파일 하지 않아도 친절하게 알려준다. 기특 기특. ^^


Posted by +깡통+
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ParseTest
{
    class ParseTest
    {
        enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };
        static void Main(string[] args)
        {
            Console.WriteLine("컬러 열거형에는 이런 값들이 있다 :");
            foreach (string s in Enum.GetNames(typeof(Colors)))
                Console.WriteLine(s);
            Console.WriteLine();
            Colors myOrange = (Colors)Enum.Parse(typeof(Colors), "Red, Yellow");
            Console.WriteLine("오랜지색 값은 합쳐진 것이다. {0}", myOrange);
        }
    }
}

Parse 메소드는 하나 이상의 열거된 상수의 이름이나 숫자 값의 문자열 표현을 해당하는 열거된 상수로 변환한다.

즉.. 숫자를 지정하지 않았으면 문자가 튀어 나온다.

이것 참 편리한 도구다.

다른 사이트도 있을듯 한데. ㅎㅎㅎ

http://hilite.me/


Posted by +깡통+

약 20년을 우려먹은 Visual Basic 이 명줄이 다 되어 가는것 같다.

이미 대부분의 프로젝트에서는 잘 쓰지 않을 것이라 추측한다.

일단 우리 회사는 빼고 ㅎㅎ


이제 다음 먹거리를 준비해야 된다.

난 생계를 책임지는 가장으로 가족을 먹여 살려야 하는 책임도 있지만,

프로그래머라는 직업을 유지하기 위해서는 새로운 언어를 습득해야할 시기인 것이다.

야야..  지금껏 그래왔잖아!

그 옛날 GW-BASIC 부터 지금까지 언어의 한계에 부딪혀 새로운 언어를 습득 했다.

C#이 처음 나왔을땐 java 줄을 타야하나~ 고민했다.

양대 산맥으로 커준 덕택에 내가 갈 길이 좀더 분명하고 앞서 달려가신 많은 개발자 덕택에 진흙 길을 아님이 분명하다.


잘 해보자.  연말에 웃을 수 있기를!!


Posted by +깡통+


데이터베이스에 꽃? ㅋㅋ 



Posted by +깡통+

XP에서는 GetTickCount 이라는 함수가 있다.

컴퓨터가 켜진뒤 1ms 값으로 기록된 Tick 데이터인데 / 1000 을 해야 초가 나온다.

Long 변수값 때문에 32 bit의 한계를 가지고 태어나 최대 49.61일 정도만 측정된다.( 누구는 49.7 이라는데 계산바랍니다. )


아무튼!

이 방법으로 280일 동안 켜져 있는 컴퓨터의 시간을 측정하기엔 처음부터 안 맞는 구조다.

VB6 로 해결 할 수 있는 방법을 구글링 했으나 삽질만 하루종일 했다. 


"로컬 영역 연결" 상태창에서는 연결된 시간이 표기 된다.

그 데이터를 얻기 위해 노력했으나 실패~  아닌 삽질이 연속되었고


마침내 찾았다.


net 명령어로 가능했다. DOS를 아시는 분이면 금방 찾을텐데 ㅎ

CMD 창을 띄운후 net statistics workstation  (엔터)


2016-05-17 11:44 이후의 통계


수신된 바이트 ...

수신된 서버 메시지 블록 ...

전송된 바이트 ...

전송된 서버 메시지 블록 ...


이걸 리다이렉션을 통해 TXT 파일로 저장해서 읽는 방법이다.

C:\>net statistics workstation > uptime.txt

하아~ ^^..

Posted by +깡통+

1>------ 빌드 시작: 프로젝트: HMFS, 구성: Release x64 ------
1>링크하고 있습니다...
1>HMFS.obj : error LNK2001: "public: __cdecl CWinAppEx::CWinAppEx(int)" (??0CWinAppEx@@QEAA@H@Z) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "public: virtual __cdecl CWinAppEx::~CWinAppEx(void)" (??1CWinAppEx@@UEAA@XZ) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "public: virtual struct CRuntimeClass * __cdecl CWinAppEx::GetRuntimeClass(void)const " (?GetRuntimeClass@CWinAppEx@@UEBAPEAUCRuntimeClass@@XZ) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "public: virtual int __cdecl CWinAppEx::ExitInstance(void)" (?ExitInstance@CWinAppEx@@UEAAHXZ) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "public: virtual int __cdecl CWinAppEx::LoadState(wchar_t const *,class CFrameImpl *)" (?LoadState@CWinAppEx@@UEAAHPEB_WPEAVCFrameImpl@@@Z) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "public: virtual int __cdecl CWinAppEx::CleanState(wchar_t const *)" (?CleanState@CWinAppEx@@UEAAHPEB_W@Z) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "public: virtual int __cdecl CWinAppEx::SaveState(wchar_t const *,class CFrameImpl *)" (?SaveState@CWinAppEx@@UEAAHPEB_WPEAVCFrameImpl@@@Z) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "public: virtual int __cdecl CWinAppEx::OnViewDoubleClick(class CWnd *,int)" (?OnViewDoubleClick@CWinAppEx@@UEAAHPEAVCWnd@@H@Z) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "public: virtual int __cdecl CWinAppEx::ShowPopupMenu(unsigned int,class CPoint const &,class CWnd *)" (?ShowPopupMenu@CWinAppEx@@UEAAHIAEBVCPoint@@PEAVCWnd@@@Z) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "public: virtual void __cdecl CWinAppEx::OnAppContextHelp(class CWnd *,unsigned long const * const)" (?OnAppContextHelp@CWinAppEx@@UEAAXPEAVCWnd@@QEBK@Z) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "protected: virtual void __cdecl CWinAppEx::OnClosingMainFrame(class CFrameImpl *)" (?OnClosingMainFrame@CWinAppEx@@MEAAXPEAVCFrameImpl@@@Z) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "protected: virtual int __cdecl CWinAppEx::LoadWindowPlacement(class CRect &,int &,int &)" (?LoadWindowPlacement@CWinAppEx@@MEAAHAEAVCRect@@AEAH1@Z) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "protected: virtual int __cdecl CWinAppEx::StoreWindowPlacement(class CRect const &,int,int)" (?StoreWindowPlacement@CWinAppEx@@MEAAHAEBVCRect@@HH@Z) 외부 기호를 확인할 수 없습니다.
1>HMFS.obj : error LNK2001: "protected: virtual int __cdecl CWinAppEx::ReloadWindowPlacement(class CFrameWnd *)" (?ReloadWindowPlacement@CWinAppEx@@MEAAHPEAVCFrameWnd@@@Z) 외부 기호를 확인할 수 없습니다.
1>D:\project\vc80\HMFS\x64\Release\HMFS.exe : fatal error LNK1120: 14개의 확인할 수 없는 외부 참조입니다.
1>빌드 로그가 "file://d:\project\vc80\HMFS\HMFS\x64\Release\BuildLog.htm"에 저장되었습니다.
1>HMFS - 오류: 15개, 경고: 0개
========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========

 

이러한 오류가 났다.

분명히 지난번에 정상적으로 컴파일 한 소스임이 틀림 없는데...

 

기억을 되듬어보니 VS2008 를 패치 했었다. 

컴파일 플랫폼 선택에서 x64가 나타나지 않았기 때문이다.

다시 Win32 를 선택해주니 정상적인 컴파일이 되었다.

 

조금은 사소한것 같지만 소스 수정을 잘못한줄 알고 디버깅(되돌리기)을 얼마나 했던가 -_-;

결국 원본 자체가 컴파일 안되는걸 모르고 몇 시간 허비했다.

Posted by +깡통+

컴퓨터를 하는 사람들이 체감하는 온도와...

땜쟁이들이 체감하는 온도는 분명 다른듯.


누구는 CPU 발열이 심하다..

누구는 그정도는 아니다..


구매전 난 누구의 말이 맞는지 믿지 못했습니다.

이젠 확실하게!!  이건 평범한 발열이라고 말할 수 있습니다.


지금가지 발열때문에 손가락이 화상을 입었던 적이 한두번 이겠습니까~

칩에 구멍이 날 정도로 심한 발열이 아닙니다.


또 방열판이 없어야 열 배출이 쉬운 그런 칩들도 있습니다.

쿨러는 더더욱 오버일테지요.



결론은 "방열판 하나 달아주면 전혀 문제가 없다." 입니다.


Posted by +깡통+

툴을 이용해서 OS 이미지를 심는 과정중

SD용량이 16GB 인데 4GB 밖에 할당하지 않는다.

그리고 아래와 같이 MySQL을 설치하면 ...  개망.


can@can-desktop:~$ sudo apt-get install mysql-server mysql-client php5-mysql

[sudo] password for can:

패키지 목록을 읽는 중입니다... 완료

의존성 트리를 만드는 중입니다

상태 정보를 읽는 중입니다... 완료

다음 패키지를 더 설치할 것입니다:

  php5-common

제안하는 패키지:

  php5-user-cache

다음 새 패키지를 설치할 것입니다:

  mysql-client mysql-server php5-common php5-mysql

0개 업그레이드, 4개 새로 설치, 0개 제거 및 91개 업그레이드 안 함.

1개를 완전히 설치하지 못했거나 지움.

524 k바이트/542 k바이트 아카이브를 받아야 합니다.

이 작업 후 1,487 k바이트의 디스크 공간을 더 사용하게 됩니다.

계속 하시겠습니까? [Y/n] y

받기:1 http://ports.ubuntu.com/ wily-updates/main php5-common armhf 5.6.11+dfsg-1ubuntu3.1 [471 kB]

받기:2 http://ports.ubuntu.com/ wily-updates/main php5-mysql armhf 5.6.11+dfsg-1ubuntu3.1 [53.2 kB]

내려받기 524 k바이트, 소요시간 2초 (237 k바이트/초)

Selecting previously unselected package mysql-client.

(데이터베이스 읽는중 ...현재 167110개의 파일과 디렉터리가 설치되어 있습니다.)

Preparing to unpack .../mysql-client_5.6.28-0ubuntu0.15.10.1_all.deb ...

Unpacking mysql-client (5.6.28-0ubuntu0.15.10.1) ...

Selecting previously unselected package mysql-server.

Preparing to unpack .../mysql-server_5.6.28-0ubuntu0.15.10.1_all.deb ...

Unpacking mysql-server (5.6.28-0ubuntu0.15.10.1) ...

Selecting previously unselected package php5-common.

Preparing to unpack .../php5-common_5.6.11+dfsg-1ubuntu3.1_armhf.deb ...

Unpacking php5-common (5.6.11+dfsg-1ubuntu3.1) ...

Selecting previously unselected package php5-mysql.

Preparing to unpack .../php5-mysql_5.6.11+dfsg-1ubuntu3.1_armhf.deb ...

Unpacking php5-mysql (5.6.11+dfsg-1ubuntu3.1) ...

mysql-server-5.6 (5.6.28-0ubuntu0.15.10.1) 설정하는 중입니다 ...

Job for mysql.service failed because a timeout was exceeded. See "systemctl status mysql.service" and "journalctl -xe" for details.

invoke-rc.d: initscript mysql, action "start" failed.

dpkg: error processing package mysql-server-5.6 (--configure):

 설치한 post-installation 스크립트 하위 프로세스가 오류 1번을 리턴했습니다

mysql-client (5.6.28-0ubuntu0.15.10.1) 설정하는 중입니다 ...

dpkg: dependency problems prevent configuration of mysql-server:

 mysql-server 패키지는 다음 패키지에 의존: mysql-server-5.6: 하지만:

 mysql-server-5.6 패키지는 아직 설정하지 않았습니다.


dpkg: error processing package mysql-server (--configure):

 의존성 문제 - 설정하지 않고 남겨둠

php5-common (5.6.11+dfsg-1ubuntu3.1) 설정하는 중입니다 ...

보고서를 작성하지 않습니다. 오류 메시지에 따르면 예전의 실패 때문에 생긴 부수적인 오류입니다.


Creating config file /etc/php5/mods-available/pdo.ini with new version


Creating config file /etc/php5/mods-available/opcache.ini with new version

php5-mysql (5.6.11+dfsg-1ubuntu3.1) 설정하는 중입니다 ...


Creating config file /etc/php5/mods-available/mysql.ini with new version


Creating config file /etc/php5/mods-available/mysqli.ini with new version


Creating config file /etc/php5/mods-available/pdo_mysql.ini with new version

처리하는데 오류가 발생했습니다:

 mysql-server-5.6

 mysql-server

E: Sub-process /usr/bin/dpkg returned an error code (1)

can@can-desktop:~$



지우고 설치하기를 여러번~~

아래 사이트에서 깨끗이 지우고 재 설치하는 방법대로 해보니 된다. ㅠㅠ 


http://blog.naver.com/kon_pig?Redirect=Log&logNo=220420935398



Posted by +깡통+

영국의 라즈베리 재단에서 만든 교육용 컴퓨터.


35 달러라는 저렴한 가격으로 전세계에 보급하는 훌륭한 프로젝트다.


라즈베리 Zero 라는 제품은 5달러 수준이다.


기가 막힐 일이다.


Z80, AVR, STM32 시리즈를 거쳐오면서 하드웨어 보드를 매번 새롭게 설계하는 것이 비효율 적이라는 의견에 공감을 해왔었다.


내가 다니는 회사에서는 하드웨어 보드를 설계하는 것 자체를 싫어 했다.


기성품에 S/W만 넣어서 파는 것이 가장 효율적이라고 사장님은 말했다.


과거에 만들던 보드들을 싹 다 버리고 PLC 등으로만 엮어서 만든 것이 개발 기간을 단축하고 현명하다 판단했기에 지금의 자리까지 오르지 않았겠는가 싶다.


주절은 그만하고...


이러한 측면에서 라즈베리파이 보드는 내게 새로운 길을 열어다 줄 것이 자명한 일이었다.


미리 구매하고 싶었지만 아직은 시기 상조이다 싶었다. Pi 3를 보는 순간 마음이 움직였다.


게다가 디**마트 에서는 정품 보드3 + 정품 케이스 + 방열판 2종 + 2.5A 아답터를 포함하여 VAT 별도로 59,000원에 판매했다.


Move Move!!  이렇게 내손에 도착한 보드.  아참! MicroSD카드는 별도 구매다. 16G 이상으로 구매하면 적당할듯.

Posted by +깡통+

VB6 에서 발생하는 에러 입니다.

 

UDP 소켓을 이용하시나요?

sckUDP.SendData "aaa"

 

상대방 UDP 포트가 없다면 송신 오류가 발생한다.

근데 SendData 할때는 발생하지 않고

 

 

Private Sub sckUdp_DataArrival(ByVal bytesTotal As Long)
    Dim sRecvData As String
    sckUDP2.GetData sRecvData    '// 여기서 발생한다.
    Call S_LPR_Process(1, sRecvData)
End Sub

 

 

처리 방법은 아래와 같다.


Private Sub sckUdp_DataArrival(ByVal bytesTotal As Long)
    On Error Resume Next
    Dim sRecvData As String
   
    sckUDP2.GetData sRecvData
    If err.Number Then err.Clear: Exit Sub
       
    Call S_LPR_Process(1, sRecvData)      
End Sub

 

 

 

참고자료.

https://support.microsoft.com/ko-kr/kb/260018

 

Posted by +깡통+

503. Bad Sequence.

파일명을 변경하려니 에러가 난다. 


한 두시간 고생했나?

wininet 에 FTPRename  함수가 안먹길래 FTPCommand 를 주려고 했었다.

그래도 안되는군아..


원인은 퍼미션 이었다.

그냉 배드 스퀀스 말고 퍼미션 오류라고 띄워주면 빨리 찾았을텐데.. ㅠㅠ

파일 쓰기는 가능했지만 이름을 변경하는데는 다른 권한을 쓰는것 같다.

아무튼 모든 권한을 주고 해결 봄.


[7] 이름 변경-FROM (RNFR)

- 사용형식 : RNFR <SP> <pathname> <CRLF>

- 설명 : 파일이나 디렉토리의 이름을 변경할 때 쓰이며, 아래의 RNTO명령어와 함께 사용되어야 한다.

예를 들어, 파일이름을 A에서 B로 바꾸고자 할 경우, 'RNFR A' 를 먼저 수행 한 후에 아래의 'RNTO B' 를 수행함으로써

파일이름 변경작업이 완료된다.

 

[8] 이름 변경-TO (RNTO)

- 사용형식 : RNTO <SP> <pathname> <CRLF>

- 설명 : 위의 RNFR참고 바람

Posted by +깡통+

보통은 I2C EEPROM을 많이 이용하는데 어쩌다보니 SPI로 설계해 버렸다.

그로 인해서 시간을 조금 허비? 했다.


SPI Write를 하는데 1 PAGE만 쓰기가 가능하고 이후 데이터를 오리무중이다..

정말 쓰기가 잘못 된건지 반대로 읽기가 안되는건지 종일 고민했다.


AT25040B 의 경우 아이러니 하게도 WREN 명령을 1 PAGE Write 할때마다 줘야한다. 이게 포인트...



void SPI_Flash_WriteArray(uint16_t address, uint8_t *data, uint8_t len) { uint16_t addr = address; uint8_t i = 0; while( i < len ) { SPI_Flash_WriteEnable();    // <== 이놈이 문제였음. EEPROM_CS_LOW(); SPI_SendByte(WRITE); // 명령선택 //SPI_SendByte((addr & 0xFF00) >> 8); // 상위어드레스를 쓸 경우 SPI_SendByte(addr & 0xFF); // 하위어드레스 for(; i < len;) { SPI_SendByte(data[i++]); // 쓸 데이터 1 Byte씩 보내기 if(++addr % PAGE_SIZE == 0) { break; } } EEPROM_CS_HIGH(); delay_ms(10);    // 칩마다 틀리지만 쓰기를 실행하는데 5ms 필요하다. } }


Posted by +깡통+

도구->옵션->디렉토리 에서 각각 컴파일에서 참조할 폴더를 지정하는 방법.


또는 StdAfx.h 파일에다가 참조할 헤더파일과 라이브러리를 지정하는 방법.

아시겠지만 DLL 참조시 lib 파일이 함께 필요합니다.

DLL 파일은 EXE 파일이 실행될때 필요 한 것일뿐이고 Lib 파일은 컴파일시 링크때 필요한 파일 입니다.



#pragma comment(lib, "./Others/Libs/xxx.lib")

#pragma comment(lib, "./Others/Libs/xxx2.lib")



위 코드는 VC6.0, VC9.0 (2008) 에서 적용했습니다.


Posted by +깡통+

 

 

 

T= RichTextBox 1개와 T2= TextBox 1개를 만듭니다.

버튼을 3개 그리세요~

 

Private Sub Command1_Click()
    T.Text = "AA하하호BB호히히히XX"
    T.SelStart = 1
    T.SelLength = 2
    T.SelColor = vbRed
    T.SelStart = 4
    T.SelLength = 2
    T.SelColor = vbGreen
    T.SelFontName = "궁서"  
End Sub

 

Private Sub Command2_Click()
    T.Text = ""
    T.SelRTF = T2.Text
End Sub

 

Private Sub Command3_Click()    
    T.SelStart = 0
    T.SelLength = Len(T)   
    T2.Text = T.SelRTF   
End Sub

RTF 값에서 얻은 코드는 아래와 같습니다.

대부분 \f 로 시작하면 명령어로 처리 하며,

\cf 는 폰트의 색상을 처리하고 \' 로 시작하면 2 Byte로 처리합니다.

 

첫번째 대괄호는 폰트 정보이며,

{\rtf1\ansi\deff0{\fonttbl{\f0\fnil\fcharset129 \'b1\'bc\'b8\'b2;}{\f1\fnil\fcharset129 \'b1\'c3\'bc\'ad;}}

두번째 대괄호는 색상 정보입니다.
{\colortbl ;\red255\green0\blue0;\red0\green255\blue0;}

아래 코드는 ?? 아직 모르겠네요~
\uc1\pard\lang1042

\f0    // 0 번째 폰트선택( 상단에 빨간색 부분 입니다. 폰트명이 기재되어 있습니다. )

\fs18    // 폰트 사이즈를 의미 합니다.

A    // 'A' 출력

\cf1 // 컬러를 1번째 색상 정보를 사용하네요.  Red 입니다.

A    // 'A' 출력

\'c7\'cf    // '' 출력

\cf0    // 컬러를 0번째 즉, 기본값 Black 으로 변경합니다.

\'c7\'cf    //  '하' 출력

\cf2    // 컬러를 2번째 색상 정보를 사용합니다. Green 입니다.

\f1    // 1 번째 폰트선택( 상단에 파란색 부분 입니다. 다른 폰트명이 기재되어 있네요 )

\'c8\'a3    // '' 출력

B        // 'B' 출력

\cf0    // 컬러를 0번째 Black 으로 변경합니다.

\f0     // 폰트도 0번째로 변경합니다.

B        // 'B' 출력

\'c8\'a3    // '호' 출력

\'c8\'f7    // '히' 출력

\'c8\'f7    // '히' 출력

\'c8\'f7    // '히' 출력

X            // 'X' 출력

X            // 'X' 출력

}

 

하아~  이로써 Color 정보에 대한 분석을 마쳤습니다.

도움이 되시는 분들이 있기를~~!!

 

참고 주소 : https://msdn.microsoft.com/ko-kr/library/ee681613(v=vs.95).aspx

Posted by +깡통+

VB6 에서 Sheridan 3D Controls (threed32.ocx) 을 이용하여 버튼을 만드는 경우가 있다.

 

프로그램을 실행하여 테스트중 SSCommand 버튼을 클릭하는 순간 프로젝트가 닫히고 VB6 까지 종료되는 버그를 경험하였다.

 

몇번 그 문제를 해결했었는데 포스팅을 남겨놔야 다시 찾을 것 같다.

 

원인: 모름.

 

해결방법: VS6sp5VB.exe   서비스팩 5을 설치하고 해결.

 

 

 

Posted by +깡통+

두개의 체크박스를 옵션처럼 쓰고

또 각각의 체크박스가 선택해제되게 하려면 아래와 같이 코딩하면 된다.

 

Private Sub Check1_Click()
    If Check1.Tag = "BUSY" Then Exit Sub
    If Check2.Value = vbChecked Then
        Check2.Tag = "BUSY"
        Check2.Value = vbUnchecked
        Check2.Tag = ""
    End If
End Sub

Private Sub Check2_Click()
    If Check2.Tag = "BUSY" Then Exit Sub
    If Check1.Value = vbChecked Then
        Check1.Tag = "BUSY"
        Check1.Value = vbUnchecked
        Check1.Tag = ""
    End If
End Sub

 

Posted by +깡통+
이전버튼 1 2 3 이전버튼