2010-10-17 47 views
0

當我有一個由C庫具有以下簽名導出的函數:ExecutionEngineException拋出調用本機代碼

extern "C" BOOL Func()

該函數聲明在VB.NET代碼:

<DllImport("mylib.dll", CallingConvention:=CallingConvention.Cdecl)>

Private Shared Function Func() As Boolean

End Function

問題是,當我從.NET代碼調用函數時,我得到一個ExecutionEngineException。

鑑於BOOL在此C代碼中的類型定義爲int,該聲明應該不同嗎?如果是這樣,我應該如何聲明這一點?至於ShortInt32?我需要編組返回值嗎?

回答

0

C函數不返回一個真正的布爾值,它返回一個整數。您可能需要marshall it propery

編輯:此外,你應該使你的功能是靜態的。

+0

這是否意味着我需要這樣做:Private Shared Function Func()As Boolean – 2010-10-17 04:07:23

+0

是的。但這不是你的問題,非託管代碼正在破壞堆。 – 2010-10-17 10:15:31

+0

嗨漢斯,當你說'已損壞的代碼正在銷燬堆'時,你是在談論託管堆?我能做些什麼來避免這種情況?我應該在非託管代碼中尋找什麼?據我所知,它似乎沒有做任何破壞性的事情,比如分配和銷燬數組。 – 2010-10-17 17:30:06