2009-11-20 4 views
0

C# (2.0/3.5)에서 일부 레거시 Delphi 5 DLL을 사용하려고합니다.C#에서 OleVariant 마샬링

function SimpleExport: OleVariant; stdcall; 
function BiDirectionalExport(X: OleVariant; var Y: OleVariant): OleVariant; stdcall; 

내가 Marshal.GetDelegateForFunctionPointer를 사용하여 대의원 이러한 설정하고자하는,하지만 난 제대로 마샬링 데이터를 얻는 데 문제 : 내 보낸 기능 중 일부는 다음과 같은 선언됩니다. LoadLibrary 및 GetProcAddress의 kernel32 가져 오기를 사용하고 있으므로 GetDelegateForFunctionPointer를 사용하여 정적 p/invoke 선언이 아닌 실제 마샬링을 수행합니다.

.NET 마샬링 서비스는 COM OleVariants에 개체를 마샬링 할 수 있으므로이 작업을 시도했습니다. 그러나 예외가 발생합니다 : "PInvoke 제한 : 변형을 반환 할 수 없습니다.". 그래서 저는 맞춤식 마샬 러를 사용해야한다고 생각합니다.

Delphi 5 OleVariant를 .NET에서 읽을 수있는 방법으로 마샬링하는 올바른 방법은 무엇입니까?

답변

1

OleVariant는 거의 모든 유형이 될 수 있고 C#의 모든 유형을 객체로 처리 할 수 ​​있으므로 system.object를 시도합니다.

this link도 도움이 될 수 있습니다.

+0

기본 마샬링 서비스에서 System.Object를 사용하면 불행하게도 작동하지 않습니다. 이를 반영하기 위해 질문을 업데이트했습니다. – ulrikj