簡體   English   中英

編譯一個支持VBA中聲明函數的DLL

[英]Compile a dll that supports declare function in VBA

所以新手在這里,所以隨時讓我知道任何禮節違規!

我是圖書館編譯的新手,並且一直在研究(主要是在這個論壇上)構建庫,這些庫可以從辦公室和其他支持vba腳本的程序中引用。 我找到了一些好的答案。 我已成功執行此線程的解決方案:

一個簡單的C#DLL - 如何從Excel,Access,VBA,VB6中調用它?

這涉及在VBA中創建一個C#類的實例,然后調用該類的方法(該DLL必須是'regasm'ed)。 我對此主題中概述的解決方案非常感興趣:

以編程方式在VBA宏中設置DLL搜索路徑

其中頂級upvoted答案(來自Panda-34)似乎顯示了使用純聲明函數而不是對象創建的方法。 如果我正確理解Panda的答案,這個方法可以將一個dll加載到vba項目中,而無需在tools-> references中設置引用(它使用ChDir的一個漂亮的技巧)。

我能夠讓DeclareFunction傳遞vba compilaton,但是當執行使用該函數到達一行時,我得到一個“無法確定入口點”類型的消息。 此錯誤的所有論壇解決方案都涉及使用regasm在dll中注冊類,然后設置引用以便可以創建類的實例。 我的問題是:

1)在熊貓的解決方案中,dll還需要regasm嗎?

2)使用C#實現這個解決方案是不可能的,因為C#函數總是包含在類中? 我一直在開始懷疑問題是你是否無法在dll的全局級別上看不到的方法上聲明函數,因為它可能不明確 - Test.dll中的Class1和Class2都可能都有一個HelloWorld()成員。 如果是這樣的話,我更喜歡C ++(我的機器有csc而不是cl,所以我一直在學習一些C#)。

如果我不應該為這個問題開始一個新線程,我很抱歉。 我是SO的新手,所以我沒有權限評論Panda的回答,並且它特別說不要用你的答案提出另一個關於某人回答的問題,所以我認為這意味着開始一個新線程......

C#不支持MSIL的所有功能。 全球職能就是其中之一。 所以AFAIK你不能在C#中擁有全局函數,它只是語言的一部分。 你需要Managed C ++ ex。 至於我的經驗,最好的方法是使用注冊了regasm和codebase開關的COM友好c#程序集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM