정말 급하게 되었습니다. 고수님들 도와주실꺼죠..
다음과 같은 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,
};
===================================
함수는 어느정도 변환을 하겠는데.. 이런 선언부가 문제가 되네요..
자세한 설명 부탁드립니다... 읽어주셔서 감사합니다...
> 정말 급하게 되었습니다. 고수님들 도와주실꺼죠..
>
> 다음과 같은 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언어 컴파일러로 전환하는 그런 프로그램을 작성한
경험이 있는데요, 혹 다른 문제 또 있으면 연락주십시요.
감사합니다.