簡體   English   中英

在WPF項目中將VBA項目用作DLL

[英]Using VBA project as dll in wpf project

我有一個vba項目,我想在c#wpf中做同樣的事情,所以有什么辦法可以使用相同的項目,而只是使用wpf制作UI? 有沒有什么辦法像創建此vba項目的dll並將其添加到新的wpf項目中並調用現有項目的API。

不完全是。 VBA是VB6的簡化版本,因此您沒有完整的類型庫發布功能。 就是說,有可能 (盡管很痛苦)讓VBA實現由typelib發布的COM接口,然后將其公開給托管代碼,並通過COM interop從您喜歡的任何C#代碼(包括WPF)中調用它們。

基本上,您需要:

  • 定義IDispatch或雙接口
  • 將其發布在類型庫中
  • 將typelib引用到您的VBA項目(和C#項目中,如果它不是從那里開始的)
  • 編寫實現新接口的VBA類模塊
  • 將類的實例化屬性設置為PublicNotCreatable
  • 在VBA(非類)模塊中編寫一個shim函數,您可以通過Excel的Application從C#調用該函數。Run方法-此函數應創建VBA類的實例並返回它。 調用C#代碼會將返回的值強制轉換為您先前聲明的IDispatch或雙接口的托管版本。

瞧-現在您可以直接從C#調用VBA代碼。 早在幾年前,但是我已經通過巨大的舊式VBA代碼庫實現了這一目標,並取得了巨大的成功。 但是,這是一個非常痛苦的過程,充滿了危險。 接口很容易泄漏,圍繞COM接口和Typelib版本控制存在許多問題,並且線程問題很多。

綜上所述,如果您不知道如何執行大多數操作,或者無法快速找到所需的資源,則可能應該考慮將VBA移植到C#。

祝好運!

暫無
暫無

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

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