[내용]

40 byte → 20byte 사용

 

[코드]

#define _CRT_SECURE_NO_WARNINGS

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <stddef.h>   // offsetof 매크로가 정의된 헤더 파일

// C 언어에서는 구조체를 정렬할 때 멤버 중에서 가장 큰 자료형 크기의 배수로 정렬합니다.

#pragma pack(push, 1)    // 1 byte 크기로 정렬

typedef struct _DATA_MESSAGE1
{
    // 구조체 전체 크기: 20 byte, 패딩: 메모리 남은 공간

    char a; 
    char b;
    char c;
    char d;
    int e;
    int f;
    double g;

}DATA_MESSAGE1, * PDATA_MESSAGE1;

#pragma pack(pop)        // 정렬 설정을 이전 상태(기본값)로 되돌림

int main(void)
{
    DATA_MESSAGE1 dMeg;

    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.a));
    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.b));
    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.c));
    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.d));
    printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.e));
    printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.f));
    printf("double 메모리 공간의 크기: %d \n", sizeof(dMeg.g));

    printf("구조체 전체 크기는: %d \n", sizeof(dMeg));

    // offsetof 구조체에서 해당 멤버의 상대 위치가 반환
    printf("구조체 멤버의 a 위치 offset: %d\n", offsetof(DATA_MESSAGE1, a));    // 0
    printf("구조체 멤버의 b 위치 offset: %d\n", offsetof(DATA_MESSAGE1, b));    // 1
    printf("구조체 멤버의 c 위치 offset: %d\n", offsetof(DATA_MESSAGE1, c));    // 2
    printf("구조체 멤버의 d 위치 offset: %d\n", offsetof(DATA_MESSAGE1, d));    // 3

    printf("구조체 멤버의 e 위치 offset: %d\n", offsetof(DATA_MESSAGE1, e));    // 4
    printf("구조체 멤버의 f 위치 offset: %d\n", offsetof(DATA_MESSAGE1, f));    // 8

    printf("구조체 멤버의 g 위치 offset: %d\n", offsetof(DATA_MESSAGE1, g));    // 12

    return 0;
}

 

[pirnt]

char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
int 메모리 공간의 크기: 4
int 메모리 공간의 크기: 4
double 메모리 공간의 크기: 8
구조체 전체 크기는: 20
구조체 멤버의 a 위치 offset: 0
구조체 멤버의 b 위치 offset: 1
구조체 멤버의 c 위치 offset: 2
구조체 멤버의 d 위치 offset: 3
구조체 멤버의 e 위치 offset: 4
구조체 멤버의 f 위치 offset: 8
구조체 멤버의 g 위치 offset: 12

 

[내용]

기존 C언어 구조체 크기 구하기 4와 동일한 코드 단 자료형 위치가 달라지면서 메모리 효율 있게 사용

32 byte → 24 byte 사용

 

[code]

 

#define _CRT_SECURE_NO_WARNINGS

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <stddef.h>   // offsetof 매크로가 정의된 헤더 파일

// C 언어에서는 구조체를 정렬할 때 멤버 중에서 가장 큰 자료형 크기의 배수로 정렬합니다.

typedef struct _DATA_MESSAGE1
{
    // 구조체 전체 크기: 24 byte, 패딩: 메모리 남은 공간

    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | (byte 단위)
    char a; // 첫 번째 메모리 생성 8 바이트

    // | 0:a | 1:b | 2:패딩 | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | (byte 단위)
    char b;

    // | 0:a | 1:b | 2:c | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | (byte 단위)
    char c;

    // | 0:a | 1:b | 2:c | 3:d | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | (byte 단위)
    char d;

    // | 0:a | 1:b | 2:c | 3:d | 4:e | 5:패딩 | 6:패딩 | 7:패딩 | 8:패딩 | 9:패딩 | 10:패딩 | 11:패딩 | 12:패딩 | 13:패딩 | 14:패딩 | 15:패딩 |
    int e; // 두 번째 메모리 생성 8 바이트

    // | 0:a | 1:b | 2:c | 3:d | 4:e | 5:패딩 | 6:패딩 | 7:패딩 | 8:f | 9:패딩 | 10:패딩 | 11:패딩 | 12:패딩 | 13:패딩 | 14:패딩 | 15:패딩 |
    int f;

    // | 0:a | 1:b | 2:c | 3:d | 4:e | 5:패딩 | 6:패딩 | 7:패딩 | 8:f | 9:패딩 | 10:패딩 | 11:패딩 | 12:패딩 | 13:패딩 | 14:패딩 | 15:패딩 |
    // | 16:g | 17:패딩 | 18:패딩 | 19:패딩 | 20:패딩 | 21:패딩 | 22:패딩 | 23:패딩 |
    double g; // 세 번째 메모리 생성 8 바이트

}DATA_MESSAGE1, * PDATA_MESSAGE1;

int main(void)
{
    DATA_MESSAGE1 dMeg;

    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.a));
    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.b));
    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.c));
    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.d));
    printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.e));
    printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.f));
    printf("double 메모리 공간의 크기: %d \n", sizeof(dMeg.g));

    printf("구조체 전체 크기는: %d \n", sizeof(dMeg));

    // offsetof 구조체에서 해당 멤버의 상대 위치가 반환
    printf("구조체 멤버의 a 위치 offset: %d\n", offsetof(DATA_MESSAGE1, a));    // 0
    printf("구조체 멤버의 b 위치 offset: %d\n", offsetof(DATA_MESSAGE1, b));    // 1
    printf("구조체 멤버의 c 위치 offset: %d\n", offsetof(DATA_MESSAGE1, c));    // 2
    printf("구조체 멤버의 d 위치 offset: %d\n", offsetof(DATA_MESSAGE1, d));    // 3
    printf("구조체 멤버의 e 위치 offset: %d\n", offsetof(DATA_MESSAGE1, e));    // 4
    printf("구조체 멤버의 f 위치 offset: %d\n", offsetof(DATA_MESSAGE1, f));    // 8
    printf("구조체 멤버의 g 위치 offset: %d\n", offsetof(DATA_MESSAGE1, g));    // 16

    return 0;
}

[print]

 

char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
int 메모리 공간의 크기: 4
int 메모리 공간의 크기: 4
double 메모리 공간의 크기: 8
구조체 전체 크기는: 24
구조체 멤버의 a 위치 offset: 0
구조체 멤버의 b 위치 offset: 1
구조체 멤버의 c 위치 offset: 2
구조체 멤버의 d 위치 offset: 3
구조체 멤버의 e 위치 offset: 4
구조체 멤버의 f 위치 offset: 8
구조체 멤버의 g 위치 offset: 16

 

[code]

 

#define _CRT_SECURE_NO_WARNINGS

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <stddef.h>   // offsetof 매크로가 정의된 헤더 파일

// C 언어에서는 구조체를 정렬할 때 멤버 중에서 가장 큰 자료형 크기의 배수로 정렬합니다.

typedef struct _DATA_MESSAGE1
{
    // 구조체 전체 크기: 32 byte, 패딩: 메모리 남은 공간

    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | (byte 단위)
    char a;

    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | 8:b | 9:패딩 | 10:패딩 | 11:패딩 | 12:패딩 | 13:패딩 | 14:패딩 | 15:패딩 |
    double b;

    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | 8:b | 9:패딩 | 10:패딩 | 11:패딩 | 12:패딩 | 13:패딩 | 14:패딩 | 15:패딩 |
    // | 16:c | 17:패딩 | 18:패딩 | 19:패딩 | 20:패딩 | 21:패딩 | 22:패딩 | 23:패딩 | 24:패딩 | 25:패딩 | 26:패딩 | 27:패딩 | 28:패딩 | 29:패딩 | 30:패딩 | 31:패딩 |
    char c;

    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | 8:b | 9:패딩 | 10:패딩 | 11:패딩 | 12:패딩 | 13:패딩 | 14:패딩 | 15:패딩 |
    // | 16:c | 17:패딩 | 18:패딩 | 19:패딩 | 20:d | 21:패딩 | 22:패딩 | 23:패딩 | 24:패딩 | 25:패딩 | 26:패딩 | 27:패딩 | 28:패딩 | 29:패딩 | 30:패딩 | 31:패딩 |
    int d;

    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | 8:b | 9:패딩 | 10:패딩 | 11:패딩 | 12:패딩 | 13:패딩 | 14:패딩 | 15:패딩 |
    // | 16:c | 17:패딩 | 18:패딩 | 19:패딩 | 20:d | 21:패딩 | 22:패딩 | 23:패딩 | 24:e | 25:패딩 | 26:패딩 | 27:패딩 | 28:패딩 | 29:패딩 | 30:패딩 | 31:패딩 |
    int e;

    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | 8:b | 9:패딩 | 10:패딩 | 11:패딩 | 12:패딩 | 13:패딩 | 14:패딩 | 15:패딩 |
    // | 16:c | 17:패딩 | 18:패딩 | 19:패딩 | 20:d | 21:패딩 | 22:패딩 | 23:패딩 | 24:e | 25:패딩 | 26:패딩 | 27:패딩 | 28:f | 29:패딩 | 30:패딩 | 31:패딩 |
    char f;
    
    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | 8:b | 9:패딩 | 10:패딩 | 11:패딩 | 12:패딩 | 13:패딩 | 14:패딩 | 15:패딩 |
    // | 16:c | 17:패딩 | 18:패딩 | 19:패딩 | 20:d | 21:패딩 | 22:패딩 | 23:패딩 | 24:e | 25:패딩 | 26:패딩 | 27:패딩 | 28:f | 29:g | 30:패딩 | 31:패딩 |
    char g;


}DATA_MESSAGE1, * PDATA_MESSAGE1;

int main(void)
{
    DATA_MESSAGE1 dMeg;

    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.a));
    printf("double 메모리 공간의 크기: %d \n", sizeof(dMeg.b));
    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.c));
    printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.d));
    printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.e));
    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.f));
    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.g));

    printf("구조체 전체 크기는: %d \n", sizeof(dMeg));

    // offsetof 구조체에서 해당 멤버의 상대 위치가 반환
    printf("구조체 멤버의 a 위치 offset: %d\n", offsetof(DATA_MESSAGE1, a));    // 0
    printf("구조체 멤버의 b 위치 offset: %d\n", offsetof(DATA_MESSAGE1, b));    // 8
    printf("구조체 멤버의 c 위치 offset: %d\n", offsetof(DATA_MESSAGE1, c));    // 16
    printf("구조체 멤버의 d 위치 offset: %d\n", offsetof(DATA_MESSAGE1, d));    // 20
    printf("구조체 멤버의 e 위치 offset: %d\n", offsetof(DATA_MESSAGE1, e));    // 24
    printf("구조체 멤버의 f 위치 offset: %d\n", offsetof(DATA_MESSAGE1, f));    // 28
    printf("구조체 멤버의 g 위치 offset: %d\n", offsetof(DATA_MESSAGE1, g));    // 29

    return 0;
}

 
[print]

char 메모리 공간의 크기: 1
double 메모리 공간의 크기: 8
char 메모리 공간의 크기: 1
int 메모리 공간의 크기: 4
int 메모리 공간의 크기: 4
char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
구조체 전체 크기는: 32
구조체 멤버의 a 위치 offset: 0
구조체 멤버의 b 위치 offset: 8
구조체 멤버의 c 위치 offset: 16
구조체 멤버의 d 위치 offset: 20
구조체 멤버의 e 위치 offset: 24
구조체 멤버의 f 위치 offset: 28
구조체 멤버의 g 위치 offset: 29

[code]

 

#define _CRT_SECURE_NO_WARNINGS

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <stddef.h>   // offsetof 매크로가 정의된 헤더 파일

// C 언어에서는 구조체를 정렬할 때 멤버 중에서 가장 큰 자료형 크기의 배수로 정렬합니다.

typedef struct _DATA_MESSAGE1
{
    // 구조체 전체 크기: 16 byte, 패딩: 메모리 남은 공간

    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | (byte 단위)
    char a; // 8 byte 에서 1 byte 메모리 사용

    // | 0:a | 1:b | 2:패딩 | 3:패딩 | 4:패딩 | 5:패딩 | 6:패딩 | 7:패딩 | (byte 단위)
    char b; // 기존 8 byte 에서 1 byte 메모리 사용

    // | 0:a | 1:b | 2:패딩 | 3:패딩 | 4:c | 5:패딩 | 6:패딩 | 7:패딩 | (byte 단위)
    int c; // 기존 8 byte 1 byte 메모리 사용

    // | 0:a | 1:b | 2:패딩 | 3:패딩 | 4:c | 5:패딩 | 6:패딩 | 7:패딩 | 8:d | 9:패딩 | 10:패딩 | 11:패딩 | 12:패딩 | 13:패딩 | 14:패딩 | 15:패딩 |
    double d; // 8 byte 에서 1 byte 메모리 사용

}DATA_MESSAGE1, * PDATA_MESSAGE1;

int main(void)
{
    DATA_MESSAGE1 dMeg;

    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.a));
    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.b));
    printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.c));
    printf("double 메모리 공간의 크기: %d \n", sizeof(dMeg.d));

    printf("구조체 전체 크기는: %d \n", sizeof(dMeg));

    // offsetof 구조체에서 해당 멤버의 상대 위치가 반환
    printf("구조체 멤버의 a 위치 offset: %d\n", offsetof(DATA_MESSAGE1, a));    // 0
    printf("구조체 멤버의 b 위치 offset: %d\n", offsetof(DATA_MESSAGE1, b));    // 1
    printf("구조체 멤버의 c 위치 offset: %d\n", offsetof(DATA_MESSAGE1, c));    // 4
    printf("구조체 멤버의 d 위치 offset: %d\n", offsetof(DATA_MESSAGE1, d));    // 8

    return 0;
}
 
[print]

char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
int 메모리 공간의 크기: 4
double 메모리 공간의 크기: 8
구조체 전체 크기는: 16
구조체 멤버의 a 위치 offset: 0
구조체 멤버의 b 위치 offset: 1
구조체 멤버의 c 위치 offset: 4
구조체 멤버의 d 위치 offset: 8

[code]

 

#define _CRT_SECURE_NO_WARNINGS

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <stddef.h>   // offsetof 매크로가 정의된 헤더 파일

 // C 언어에서는 구조체를 정렬할 때 멤버 중에서 가장 큰 자료형 크기의 배수로 정렬합니다.

typedef struct _DATA_MESSAGE1
{
    // 구조체 전체 크기: 8 byte, 패딩: 메모리 남은 공간

    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | (byte 단위)
    char a; // 4 byte 에서 1 byte 메모리 사용

    // | 0:a | 1:b | 2:패딩 | 3:패딩 | (byte 단위)
    char b; // 기존 4 byte 에서 1 byte 메모리 사용

    // | 0:a | 1:b | 2:패딩 | 3:패딩 | 4:c | 5:패딩 | 6:패딩 | 7:패딩 | (byte 단위)
    int c;  // 4 byte 에서 1 byte 메모리 사용

}DATA_MESSAGE1, * PDATA_MESSAGE1;

int main(void)
{
    DATA_MESSAGE1 dMeg;

    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.a));
    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.b));
    printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.c));
    printf("구조체 전체 크기는: %d \n", sizeof(dMeg));

    // offsetof 구조체에서 해당 멤버의 상대 위치가 반환
    printf("구조체 멤버의 a 위치 offset: %d\n", offsetof(DATA_MESSAGE1, a));    // 0
    printf("구조체 멤버의 b 위치 offset: %d\n", offsetof(DATA_MESSAGE1, b));    // 1
    printf("구조체 멤버의 c 위치 offset: %d\n", offsetof(DATA_MESSAGE1, c));    // 4
 
    return 0;
}

 

[print]

char 메모리 공간의 크기: 1
char 메모리 공간의 크기: 1
int 메모리 공간의 크기: 4
구조체 전체 크기는: 8
구조체 멤버의 a 위치 offset: 0
구조체 멤버의 b 위치 offset: 1
구조체 멤버의 c 위치 offset: 4

[code]

#define _CRT_SECURE_NO_WARNINGS

#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <stddef.h>   // offsetof 매크로가 정의된 헤더 파일

// C 언어에서는 구조체를 정렬할 때 멤버 중에서 가장 큰 자료형 크기의 배수로 정렬합니다.

typedef struct _DATA_MESSAGE1
{
    // 구조체 전체 크기: 8 byte, 패딩: 메모리 남은 공간

    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | (byte 단위)
    char a; // 4 byte에서 1 byte 메모리 사용

    // | 0:a | 1:패딩 | 2:패딩 | 3:패딩 | 4:b | 5:패딩 | 6:패딩 | 7:패딩 | (byte 단위)
    int b;  // 4 byte 에서 1 byte 메모리 사용

}DATA_MESSAGE1, * PDATA_MESSAGE1;

int main(void)
{
    DATA_MESSAGE1 dMeg;

    printf("char 메모리 공간의 크기: %d \n", sizeof(dMeg.a));
    printf("int 메모리 공간의 크기: %d \n", sizeof(dMeg.b));
    printf("구조체 전체 크기는: %d \n", sizeof(dMeg));

    // offsetof 구조체에서 해당 멤버의 상대 위치가 반환
    printf("구조체 멤버의 a 위치 offset: %d\n", offsetof(DATA_MESSAGE1, a));    // 0
    printf("구조체 멤버의 b 위치 offset: %d\n", offsetof(DATA_MESSAGE1, b));    // 4

    return 0;
}

 

 

[print]

char 메모리 공간의 크기: 1
int 메모리 공간의 크기: 4
구조체 전체 크기는: 8
구조체 멤버의 a 위치 offset: 0
구조체 멤버의 b 위치 offset: 4

'Windows App' 카테고리의 다른 글

C언어 구조체 크기 구하기 3  (0) 2024.05.23
C언어 구조체 크기 구하기 2  (0) 2024.05.23
앱 C++ 외부 라이브러리 사용법  (0) 2024.01.31
C++ 프로젝트 원격 디버그  (0) 2022.08.09
C언어 추천 도서  (0) 2022.07.15

 

ex) info

  • dll 프로젝트 명
    • projugapi
  • 모든 프로젝트 Output File 경로
    • $(SolutionDir)OutputFile\$(Configuration)\$(Platform)\

1.개발 환경에서 라이브러리 설정

  • 포함 경로에 DLL 헤더를 추가하려면 (dll 헤더 추가)
    • C/C++>일반>추가 포함 디렉터리: $(SolutionDir)\dll\projugapi
    • 추가 설명: dll 프로젝트 솔루션 명을 지정합니다.
  • 프로젝트에 DLL 가져오기 라이브러리를 추가하려면
    • 구성 속성>링커>입력: projugapi.lib
    • 추가 설명: .lib 이름을 지정합니다.
  • 추가 라이브러리 디렉터리 설정
    • 구성 속성>링커>일반>추가 라이브러리 디렉터리: $(SolutionDir)\dll\projugapi\$(IntDir)
    • 만약 Output File 경로를 별도로 지정한 경우: $(SolutionDir)OutputFile\$(Configuration)\$(Platform)\

2.유저 환경에서 라이브러리 설정

  • 포함 경로에 DLL 헤더를 추가하려면 (dll 헤더 추가)
    • C/C++>일반>추가 포함 디렉터리: $(SolutionDir)include
    • 추가 설명: 업체가 제공하는 include 폴더 명을 지정합니다.
  • 프로젝트에 DLL 가져오기 라이브러리를 추가하려면
    • 구성 속성>링커>입력: projugapi.lib
    • 추가 설명: .lib 이름을 지정합니다.
  • 추가 라이브러리 디렉터리 설정
    • 구성 속성>링커>일반>추가 라이브러리 디렉터리: $(SolutionDir)lib
    • 추가 설명: 업체가 제공하는 lib 폴더 명을 지정합니다.

3.앱 실행시 오류 메시지가 표시 되는 경우 

  • dll 파일을 실행파일과 동일한 위치에 복사

4.바이너리 샘플 프로그램 배포하는 경우

  • dll, lib, exe 한 곳에 모아서 배포

5.참고 링크

https://learn.microsoft.com/ko-kr/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=msvc-170

 

연습: 고유한 동적 링크 라이브러리 만들기 및 사용(C++)

C++를 사용하여 Visual Studio에서 Windows DLL(동적 연결 라이브러리)을 만듭니다.

learn.microsoft.com

 

https://reqrypt.org/windivert.html

 

WinDivert: Windows Packet Divert

WinDivert: Windows Packet Divert Windows Packet Divert (WinDivert) is a user-mode packet capture-and-divert package for Windows 10, Windows 11, and Windows Server. WinDivert allows user-mode applications to capture/modify/drop network packets sent to/from

reqrypt.org

 

 

6.빌드 순서 변경

  • 프로젝트에 DLL과 앱 프로젝트가 동일한 위치에 존재한다면 dll부터 빌드를 수행해야 합니다.
  • 아래의 그림을 참고 바랍니다.

 

7.앱 C++ 외부 라이브러리 사용법 (개발 환경 + 유저 환경 라이브러리 동시 설정)

  • 포함 경로에 DLL 헤더를 추가하려면 (dll 헤더 추가)
    • $(SolutionDir)\dll\pgfdapi
    • $(SolutionDir)include 
  • 프로젝트에 DLL 가져오기 라이브러리를 추가하려면
    • pgfdapi.lib
  • 추가 라이브러리 디렉터리 설정
    • $(SolutionDir)OutputFile\$(Configuration)\$(Platform)\
    • $(SolutionDir)lib

* 가장 가독성 좋음.

'Windows App' 카테고리의 다른 글

C언어 구조체 크기 구하기 2  (0) 2024.05.23
C언어 구조체 크기 구하기 1  (0) 2024.05.23
C++ 프로젝트 원격 디버그  (0) 2022.08.09
C언어 추천 도서  (0) 2022.07.15
app SHA256 EV서명 방법  (0) 2022.06.23

참고 링크

https://docs.microsoft.com/ko-kr/visualstudio/debugger/remote-debugging-cpp?view=vs-2022 

 

C++ 프로젝트 원격 디버깅 - Visual Studio (Windows)

다음 단계별 지침에 따라 원격 컴퓨터에서 Visual Studio C++ 애플리케이션을 디버그하는 방법을 알아봅니다.

docs.microsoft.com

 

 

 

'Windows App' 카테고리의 다른 글

C언어 구조체 크기 구하기 2  (0) 2024.05.23
C언어 구조체 크기 구하기 1  (0) 2024.05.23
앱 C++ 외부 라이브러리 사용법  (0) 2024.01.31
C언어 추천 도서  (0) 2022.07.15
app SHA256 EV서명 방법  (0) 2022.06.23

+ Recent posts