2013-07-28 1 views
0

Delphi 응용 프로그램에서 ActiveX 개체를 사용하려고합니다. 이 메소드 호출을 통해PSafeArray에서 Delphi 레코드 보내기

SCategoryMember = packed record 
    terminal: WideString; 
    semanticStatements: WideString; 
    symbolAttributeDefinitions: WideString; 
end; 

: 다음 SCategoryMember 구조가 a_members 매개 변수의 요소로 전송한다

procedure SetCategoryMembers(var a_category: SGrammarSymbol; 
    a_mode: SetCategoryMode; 
    var a_members: PSafeArray); safecall; 

내가 사용해야하는 방법 중 하나는 내가 다음과 같은 구조를 보낼 것을 요구하고 있습니다.

패킷 레코드를 PSafeArray의 요소로 변환하는 방법에 대한 아이디어가 있으십니까?

+0

도움이 될만한 링크는 [this post] (http://stackoverflow.com/a/6347140/62576)를 참조하십시오. –

답변

0

레코드 배열을 ActiveX 메서드로 보낼 것으로 예상됩니다.

AFAIK, Delphi는 COM 레코드 유형 (즉, VT_RECORD 내부 형식)의 직접 마샬링을 지원하지 않습니다. 그러나 create a safe array pointing to the data을 시도 할 수 있습니다. 그러나 구조에 WideString 구성원이있는 것은 추가 문제 일 수 있습니다. 다소 어렵지만 feasible, if you take a look at this answer.

이러한 구조에 대해 일반적으로 COM에서 수행하는 작업은 레코드 대신 개체를 정의하는 것입니다 (예 : C#에서 struct 대신 class). 배열의 배열은 List<>으로 정의됩니다. 그런 다음 필요한 모든 멤버가있는 ..._tlb.pas에 델파이 인터페이스로 가져옵니다. COM 내부를 조정할 필요가 없습니다. ActiveX 코드를 변경할 수 있다면이 방법을 사용하는 것이 좋습니다.

+0

일부 익명 투표를하는 이유는 무엇입니까? –

관련 문제