參數類型,我上一個項目,我需要導入一個DLL文件時創建一個幾年前一個VB項目。該DLL是用C++創建的,是這樣的:使用DLL導入/中聲明VB.NET與不使用.NET
void CoordinateConversionService::convert(SourceOrTarget::Enum sourceDirection, SourceOrTarget::Enum targetDirection, CoordinateTuple* sourceCoordinates, Accuracy* sourceAccuracy, CoordinateTuple& targetCoordinates, Accuracy& targetAccuracy)
我在我的工作實習,而我還沒有來卻利用這一點,所以我的理解是極其有限的,用我的VB的使用沿着(我是C++/C#的人)。這裏有幾個問題:
1)看dllimport的,好像參數外的最後部分返回類型。來自其他網站的示例代碼:
<DllImport("advapi32.dll")> _
Public Function GetUserName(_
ByVal lpBuffer As StringBuilder, _
ByRef nSize As Integer) As Boolean
是「作爲布爾型」的返回類型嗎?如果是這樣,我嘗試使用「Sub」,它說「關鍵字不會命名一個類型」。因此,我爲什麼研究聲明,因爲它似乎可以返回void/sub作爲返回類型。
2)嘗試使用類型「CoordinateTuple」和「準確性」給我的問題,說他們沒有定義。我怎麼能解決這個問題,因爲我不認爲我可以真正定義它們,那麼它們是指針呢?另外 - 我不能以任何方式修改C++代碼,所以我擁有的就是我所擁有的。
PS - 我嘗試添加此作爲參考,我得到了說,這是不是一個有效的COM文件中的錯誤。 – ibarczewski 2010-06-25 13:56:54
我們需要更多關於'SourceOrTarget :: Enum','CoordinateTuple'和'Accuracy'自定義類型的信息。 VB和C#只能處理簡單的C函數,沒有C++函數(編組的目的是提供簡單的訪問Windows API),因此,如果這些類型都是非POD類型,您必須編寫與任何一個C或C++包裝。 NET界面。至少,你必須擺脫C++引用參數並聲明函數'extern「C」'。 – Philipp 2010-06-25 15:13:36
你在說C++代碼嗎?因爲我無法以任何方式,形狀或形式修改它。 – ibarczewski 2010-06-25 15:33:39