Q&A

  • c header --> 파스칼 문법으로.. 정말 급합니다.
정말 급하게 되었습니다. 고수님들 도와주실꺼죠..



다음과 같은 C Header file이 있는데 어떤식으로 파스칼 문법으로 변환해야 하나요..?

===================================

typedef struct tagDeviceInfoParam

{

DWORD ComPort;

DWORD ComSpeed;

DWORD ImageWidth;

DWORD ImageHeight;

DWORD Contrast; // 0~100

DWORD Brightness; // 0~100

DWORD BlackCalibration;

DWORD AutoExposure;

DWORD AutoGain;

DWORD Gain;

}DeviceInfoParam;

typedef DeviceInfoParam* LPDeviceInfoParam;

============================================



이거하고 하나 더 봐주세요..

==================================

enum ComPort {

AUTO_DETECT = 0,

COM1 = 0x3f8, // default

COM2 = 0x2f8,

COM3 = 0x3e8,

COM4 = 0x2e8,

LPT1 = 0x378,

LPT2 = 0x278,

LPT3 = 0x3BC,

USB,

};

===================================

함수는 어느정도 변환을 하겠는데.. 이런 선언부가 문제가 되네요..



자세한 설명 부탁드립니다... 읽어주셔서 감사합니다...

1  COMMENTS
  • Profile
    이재식 2000.02.11 05:26
    변인호 wrote:

    > 정말 급하게 되었습니다. 고수님들 도와주실꺼죠..

    >

    > 다음과 같은 C Header file이 있는데 어떤식으로 파스칼 문법으로 변환해야 하나요..?

    > ===================================

    > typedef struct tagDeviceInfoParam

    > {

    > DWORD ComPort;

    > DWORD ComSpeed;

    > DWORD ImageWidth;

    > DWORD ImageHeight;

    > DWORD Contrast; // 0~100

    > DWORD Brightness; // 0~100

    > DWORD BlackCalibration;

    > DWORD AutoExposure;

    > DWORD AutoGain;

    > DWORD Gain;

    > }DeviceInfoParam;

    > typedef DeviceInfoParam* LPDeviceInfoParam;

    > ============================================

    >

    > 이거하고 하나 더 봐주세요..

    > ==================================

    > enum ComPort {

    > AUTO_DETECT = 0,

    > COM1 = 0x3f8, // default

    > COM2 = 0x2f8,

    > COM3 = 0x3e8,

    > COM4 = 0x2e8,

    > LPT1 = 0x378,

    > LPT2 = 0x278,

    > LPT3 = 0x3BC,

    > USB,

    > };

    > ===================================

    > 함수는 어느정도 변환을 하겠는데.. 이런 선언부가 문제가 되네요..

    >

    > 자세한 설명 부탁드립니다... 읽어주셔서 감사합니다...





    이재식 Wrote :

    안녕하세요?



    먼저 첫번째 선언부터 하겠습니다.

    C언어에서는 구조체라고 합니다만, 델파이에서는 레코드로 대체합니다.

    type

    DeviceInfoParam = record

    ComPort : DWORD ;

    ComSpeed : DWORD ;

    ImageWidth : DWORD ;

    ImageHeight : DWORD ;

    Constrast : 0..100 ;

    Brightness : 0..100 ;

    BlackCalibration : DWORD ;

    AutoExposure : DWORD ;

    AutoGain : DWORD ;

    Gain : DWORD ;

    end ;



    var



    LPDDeviceInfoParam : ^DeviceInfoParam ;

    이렇게 하시면 됩니다.



    두번째 변환입니다.

    enum안에 있는 모든 열거형 요소들을 변수화 하세요.

    가령, 아래처럼 말입니다.(2개만 예를 보이겠습니다)

    const AUTO_DETECT : integer = 0 ;

    COM1 : integer = $3f8 ;



    이렇게 해야 되는 이유는 다음과 같습니다.

    c언어에서의 열거형 요소들은 정수형타입을 가집니다.

    델파이에서도 역시 열거형 요소들은 ordinal타입이라해서 정수형 타입이라고

    생각하시면 됩니다. 그리고 공통점은 선언하면 0부터 자체 초기화가 됩니다.

    그러나, C언어는 = 연산자를 사용해서 각 요소마다 값을 변경시킬 수 있습니다만,

    델파이에서는 그렇지 않습니다. 항상 0부터 시작하게 되어 있습니다.

    따라서, 델파이에서 열거형 선언을 그대로 사용하면 위처럼 각 요소마다

    특정 값을 대입할 수 없습니다.

    따라서, 델파이에서는 const로 선언해서 해주는 것이 좋습니다.

    특별히 위처럼 const로 선언해서 해주는 것이 C언어의 열거형 특징과

    유사하기 때문입니다.



    그러나, 만약 위의 두번째문제에서 각 요소들이 자체 초기값을 가지지 않는다면,

    델파이 열거형 타입을 그대로 이용할 수 있겠죠.



    예전에 파스칼 컴파일러를 C언어 컴파일러로 전환하는 그런 프로그램을 작성한

    경험이 있는데요, 혹 다른 문제 또 있으면 연락주십시요.

    감사합니다.