최병련 님이 쓰신 글 :
: C로 작성된 아래의 프로그램이 델파이로 변환 하고 있습니다.
:
: DLL Function을 부르는데 INVALID_PARAMETER 에러가 납니다.
:
: 어찌 해야 하는지요
:
: 제가 한부분은 아래에 있습니다.
:
: ==C==
: * hearder filk */
: #define MAX_HASH_LENGTH_OLD 40
: #define MAX_HASH_LENGTH_EX 128
: #define MAX_OIDSTR_LENGTH 128
: #define MAX_NAME_LENGTH 512
: #define MAX_TIME_LENGTH 32
: #define MAX_SIGNATURE_LENGTH 1024
: #define MAX_STATUS_LENGTH 80
: #define MAX_BIGNUMBER_LENGTH 40
: typedef enum
: {
: TTI_RAW = 0,
: TTI_TCP = 1,
: TTI_HTTP = 2,
: TTI_SMTP = 3
: } TTI_TransportFormat;
: typedef struct TTI_BigNumber
: {
: byte number[MAX_BIGNUMBER_LENGTH];
: int length;
: } TTI_BigNumber;
: typedef struct TTI_MessageImprintEx
: {
: char hashAlgorithmOid[MAX_OIDSTR_LENGTH];
: byte hashedMessage[MAX_HASH_LENGTH_EX];
: int hashedMessageLen;
: } TTI_MessageImprintEx;
: typedef struct TTI_TSQ_Ex
: {
: size_t size;
: TTI_MessageImprintEx messageImprint;
: char reqPolicyOid[MAX_OIDSTR_LENGTH];
: TTI_BigNumber nonce;
: BOOL certReq;
: } TTI_TSQ_Ex;
:
: /* API Functions */
: int TTI_EncodeTSQ_Ex( const TTI_TSQ_Ex * pTSQ_Ex,
: byte * encodedReq,
: size_t * encodedReqLen,
: TTI_TransportFormat transportFormat );
: /* test.c */
: {
: TTI_TSQ_Ex tsq;
: TTI_TransportFormat ttiTransport = TTI_TCP;
: byte encodedTSQ[1024];
: size_t encodedTSQLen = sizeof encodedTSQ;
: int iResult;
: iResult = TTI_EncodeTSQ_Ex( tsq, encodedTSQ, &encodedTSQLen, ttiTransport );
: }
:
: ==DELPHI==
: Const
: MAX_HASH_LENGTH_OLD = 40;
: MAX_HASH_LENGTH_EX = 128;
: MAX_OIDSTR_LENGTH = 128;
: MAX_NAME_LENGTH = 512;
: MAX_TIME_LENGTH = 32;
: MAX_SIGNATURE_LENGTH = 1024;
: MAX_STATUS_LENGTH = 80;
: MAX_BIGNUMBER_LENGTH = 40;
: type
: TTI_TransportFormat = (TTI_RAW , TTI_TCP, TTI_HTTP, TTI_SMTP);
: type
: TTI_BigNumber = Record
: number : Array[1..MAX_BIGNUMBER_LENGTH] of Byte;
: length : Integer;
: end;
: type
: PTTI_MessageImprintEx = ^TTI_MessageImprintEx;
: TTI_MessageImprintEx = Record
: hashAlgorithmOid : Array[1..MAX_OIDSTR_LENGTH] of Char;
: hashedMessage : Array[1..MAX_HASH_LENGTH_EX] of Byte;
: hashedMessageLen : Integer;
: end;
: type
: PTTI_TSQ_Ex = ^TTI_TSQ_Ex;
: TTI_TSQ_Ex = Record
: size : Integer;
: messageImprint : TTI_MessageImprintEx;
: reqPolicyOid : Array[1..MAX_OIDSTR_LENGTH] of Char;
: nonce : TTI_BigNumber;
: certReq : Boolean;
: end;
: //
: function TTI_EncodeTSQ_Ex(const pTSQ_Ex : PTTI_TSQ_Ex; encodedReq : Pbyte; encodedReqLen : PInteger; transportFormat : TTI_TransportFormat):Integer; stdcall; external 'TTI.DLL';
: //
: procedure TForm1.BitBtn1Click(Sender: TObject);
: var
: tsq : TTI_TSQ_Ex;
: ttiTransport : TTI_TransportFormat;
: iResult : Boolean;
: begin
: iResult := TTI_EncodeTSQ_Ex(@tsq, @encodedTSQ, @encodedTSQLen, ttiTransport);
: =============================================================================
: 이부분입니다.
:
: 한수 부탁 드립니다.
tsq라는 인자는 포인터가 아니라 구조체가 그냥 들어가야 하는 것 같고,
encodedTSQ라는 배열은 아예 델파이쪽 소스에는 안 보이네요. 길이도 그렇고..
그 부분들을 처리해 주셔야 할 것 같습니다
|