我在一個VB.NET項目中使用interop dll來訪問MFC項目中的一些功能。使用COM互操作時,爲什麼後期綁定修復「ByRef值類型參數不能爲空」錯誤?
Dim bIsSupposedToWork As Boolean = True
Dim api As API = GetObject(, "MyProject.API")
api.Function1() ' << Function1 returns void, and this works OK
' Function2 returns a long:
If Not bIsSupposedToWork Then
' This next line crashes the application with the message "ByRef value type parameter cannot be null"- error
api.Function2()
Else
' But this works fine:
Dim o As Object = api
o.Function2()
End If
爲什麼?
原來,在MFC類中,DISP_FUNCTION的返回值參數被定義爲VT_EMPTY。將其更改爲VT_I4可讓我使用「function2」,而無需先將api對象分配給對象變量。 仍然不確定爲什麼它使用後期綁定運行完美時,但我猜測,我在做這些時避免了一些運行時類型檢查在「互操作層之間」? – Stokke 2011-01-13 13:20:02