我的問題與this one here類似,但有一些差異。當從管理DLL調用Umanaged Dll時StackOverflow異常
我有一個fortran dll作爲後端,並且C#exe作爲前端。我使用PInvoke在它們之間傳遞數據。
C#和Fortran代碼之間有22個參數。其中一些是整數,雙精度型,指針(C#指針),數組和什麼的。所以這是一種混合類型。
問題是,對於小型數組,代碼工作正常,但是,對於大型數組(〜10k元素大小),在我的代碼進入托管代碼後立即拋出了一個stackoverflowexception。
編輯:我設法縮小了一切。這裏的Fortran代碼:
subroutine chartest(maxncv,ldv)
!DEC$ ATTRIBUTES DLLEXPORT::chartest
!DEC$ ATTRIBUTES ALIAS:'chartest'::chartest
!DEC$ ATTRIBUTES VALUE :: maxncv,ldv
&
integer, intent(in) :: maxncv, ldv
Double precision
& v(ldv,maxncv),d(maxncv,2)
print *, 'hello'
end
這是我的C#聲明:
public static extern void chartest(
[MarshalAs(UnmanagedType.I4)] int maxncv,
[MarshalAs(UnmanagedType.I4)] int ldv
);
如果我打電話chartest(546, 547)
,我會得到一個stackoverflowexception。
546*547=298662
,這似乎不是很多元素,不是?
請給出更多細節。有很多原因可以導致這種情況。 – tsinik 2010-03-24 02:40:25
在stackoverflow上的stackoverflow問題?我不贊成。 – stimms 2010-03-24 02:44:36
@tsink,我會在縮小問題後提供示例程序。 – Graviton 2010-03-24 02:45:29