我想從腳本中構建一個簡單的VB.NET COM可見DLL(我希望它可以在未註冊的情況下訪問)。 vb的文件是簡單得要命:如何從腳本構建COM可見DLL?
Imports System.Runtime.InteropServices
Imports RGiesecke.DllExport
Public Module Test
<DllExport("add")> _
Public Function TestExport(left As Integer, right As Integer) As Integer
Return left + right
End Function
End Module
當通過棟Visual Studio的UT,並試圖從Excel訪問DLL:
Public Declare Function add Lib "C:\\...\\VBLib.dll" (left As Integer, right As Integer) As Integer
它的工作原理,並提供正確的結果。但是,當我嘗試用腳本組裝DLL時,出現錯誤:Can't find DLL entry point
。
這裏是我使用的腳本:
- 首先我運行VBC編譯器:
vbc.exe /noconfig /imports:Microsoft.VisualBasic,System,System.Collections,System.Collections.Generic,System.Data,System.Diagnostics,System.Linq,System.Xml.Linq,System.Threading.Tasks /optioncompare:Binary /optionexplicit+ /optionstrict:custom /nowarn:42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 /optioninfer+ /nostdlib /platform:x86 /rootnamespace:VBLib /sdkpath:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5" /highentropyva+ /reference:"C:\...RGiesecke.DllExport.Metadata.dll","C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Core.dll","C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Data.DataSetExtensions.dll","C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Data.dll","C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.dll","C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Xml.dll","C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /out:"C:\...\VBLib.dll" /subsystemversion:6.00 /target:library Class1.vb
- 然後我跑ILDASM .exe:
- 並且最後我運行ILAsm.exe:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\ildasm.exe" /quoteallnames /unicode /nobar /out:"C:\...\VBLib.il" "C:\...\VBLib.dll"
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\ILAsm.exe" /nologo /out:"C:\...\VBLib.dll" "C:\...\VBLib.il" /DLL /resource="C:\...\VBLib.res" /optimize
我複製上述過程幾乎一字從Visual Studio生成(詳細視圖),它們都運行W/O錯誤產生一個DLL。但是,我仍然得到上面的錯誤。 在任何情況下,如果有一個更短的工作腳本來從單個VB.NET文件提供COM可見的DLL,我將非常感謝!
注:文件路徑已經縮短...
也許[<標記有ComVisible特性(真)> _](https://msdn.microsoft.com/en-us/ library/system.runtime.interopservices.comvisibleattribute(v = vs.100).aspx)屬性 –
不可以。試過了。 –
這與COM沒有任何關係。吉塞克的效用是一個IL重寫工具。你經歷了所有的步驟,除了照顧重寫。您必須使用未記錄的.export指令。對此沒什麼意義,它在任何方面都不是「更好」。如果你想在一步之內完成而不需要構建或重寫黑客,那麼你必須使用[C++/CLI語言](http://stackoverflow.com/a/17131801/17034)。 –