자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi Delphi 7 에서 .NET DLL 참조 관련
2017.09.25 15:43
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 바쁜 와중에도 답변을 주시는 분들께 감사 댓글 필수
-----------------------------------------------------------------------------------------------
델파이 7 으로,
.NET DLL(이하 DLL) 에서 정의된 배열 타입의 속성을 이용해서
특정 배열을 만드려고 합니다
-> DLL 에서 정의된 배열 속성의 초기화를 어떻게 해야하는지 궁금합니다!
------------------------------------------------------------------------------
PS: DLL 에서 정의된 속성(배열x)의 초기화는 다음과 같이 했습니다.
1. 델파이 구현부
var
dto: OleVariant;
objRecipients: Array of OleVariant;
begin
dto := CreateOLEObject('TestDllName.TestClassName');
dto.Author := CreateOLEObject('TestDllName.AuthorObject');
dto.Author.AuthorName := '홍길동';
SetLength(objRecipients, 1);
objRecipients[0] := CreateOLEObject('TestDllName.RecipientObject');
objRecipients[0].UserName := '강감찬';
objRecipients[0].UserId := '001';
dto.Recipient := objRecipients; <---- 요 부분에서 컴파일 에러가 납니다ㅠㅠ!!
(-> "Type not allowed in OLE Automation call.")
-> dto, dto.Author 의 VarType 은 Dispatch 인 것에 반해,
-> dto.Recipient 는 Array Unknown 입니다. (Delphi 상에서 확인 결과)
2. .NET DLL 코드 (Delphi 에서 참조한 DLL)
namespace TestDllName
{
public class TestClassName
{
public virtual AuthorObject Author { get; set; }
public virtual RecipientObject[] Recipient { get; set; }
}
}
Delphi Delphi 7 에서 .NET DLL 참조 관련
2017.09.25 15:43
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 바쁜 와중에도 답변을 주시는 분들께 감사 댓글 필수
-----------------------------------------------------------------------------------------------
델파이 7 으로,
.NET DLL(이하 DLL) 에서 정의된 배열 타입의 속성을 이용해서
특정 배열을 만드려고 합니다
-> DLL 에서 정의된 배열 속성의 초기화를 어떻게 해야하는지 궁금합니다!
------------------------------------------------------------------------------
PS: DLL 에서 정의된 속성(배열x)의 초기화는 다음과 같이 했습니다.
1. 델파이 구현부
var
dto: OleVariant;
objRecipients: Array of OleVariant;
begin
dto := CreateOLEObject('TestDllName.TestClassName');
dto.Author := CreateOLEObject('TestDllName.AuthorObject');
dto.Author.AuthorName := '홍길동';
SetLength(objRecipients, 1);
objRecipients[0] := CreateOLEObject('TestDllName.RecipientObject');
objRecipients[0].UserName := '강감찬';
objRecipients[0].UserId := '001';
dto.Recipient := objRecipients; <---- 요 부분에서 컴파일 에러가 납니다ㅠㅠ!!
(-> "Type not allowed in OLE Automation call.")
-> dto, dto.Author 의 VarType 은 Dispatch 인 것에 반해,
-> dto.Recipient 는 Array Unknown 입니다. (Delphi 상에서 확인 결과)
2. .NET DLL 코드 (Delphi 에서 참조한 DLL)
namespace TestDllName
{
public class TestClassName
{
public virtual AuthorObject Author { get; set; }
public virtual RecipientObject[] Recipient { get; set; }
}
}
저도 직접 위 상황을 경험해 보지 않아 코드를 보고 혹시나 하는 마음에 몇가지 코드를 제안드립니다.
1) dto의 배열필드를 가져오는 방법
if not VarIsNull(dto.RecipientObject) then
begin
objRecipients := dto.RecipientObject;
end;
2) OLE 인스턴스의 필드를 생성 후 직접 접근하는 방법
dto.Recipients := CreateOLEObject('TestDLLName.RecipientObject');
dto.Recipients[0].UserName := 'blabla blabla';
3) 기타 검색한 내용도 참고해 주세요.
Delphi, olevariants and arrays of strings
https://stackoverflow.com/questions/3349419/delphi-olevariants-and-arrays-of-strings
problem with createOleObject(Excel OLE 객체 참조)
http://www.tek-tips.com/viewthread.cfm?qid=894065