2009-11-20 50 views
0

我想從C#(2.0/3.5)中使用一些傳統的Delphi 5 DLL。一些導出的函數聲明爲這樣:編制Delphi 5 OleVariant到C#

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限制:無法返回變體」。所以我想我需要使用自定義編組器。

什麼是封送德爾福5 OleVariant弄成.NET可讀的正確方法?

回答

1

由於OleVariant可以是幾乎任何類型的,並在C#中所有類型的可以爲對象我會嘗試System.Object的處理。

而且this link可能會有所幫助。

+0

使用System.Object與默認封送處理服務不起作用不幸的是。我已更新我的問題以反映這一點。 – ulrikj 2009-11-21 12:10:22