2009-02-10 196 views
2

託管代碼我有橫貼在access-programmers.co.uk呼叫從Access 2003

請張貼在迴應這一論壇是可能..

我編在C#3.5中的DLL ..在這裏我設置解決方案屬性爲COM互操作註冊構建。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 

namespace SBG_TestWithVBA 
{ 
    [ClassInterface(ClassInterfaceType.AutoDual)] 

    public class TestHello 
    { 
    [ComVisible(true)] 

    public string SayHello(string name) 
    { 
     string message = "Hello " + name; 
     return message; 
    } 
    public string HelloWorld() 
    { 
     string message = "Hello World!"; 
     return message; 
    } 
    } 
} 

我已經註冊,然後使用

裝配和TLB文件 「C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \ regasm.exe」「\ sbgfs01 \用戶\文森特Pirolli \ My Docs \ Visual Studio 2008 \ Projects \ TestWithVBA \ TestWithVBA \ bin \ Release \ SBG_TestWithVBA.dll「/ tlb:」\ sbgfs01 \ users \ Vincent Pirolli \ My Docs \ Visual Studio 2008 \ Projects \ TestWithVBA \ TestWithVBA \ bin \ Release \ SBG_TestWithVBA.tlb「

然後,我在vba中添加tlb文件,使用tools> refere NCES菜單..

和我的VBA代碼如下:

Sub test() 
    Dim f As SBG_TestWithVBA 
    Set f = New SBG_TestWithVBA 
    f.HelloWorld 
End Sub 

我收到以下錯誤,即使智能感知工作VBA編輯器中: 「自動化錯誤 該系統找不到指定的文件「。

任何人有任何想法?我在以前的文章中有文章,但我找不到解決方案。


沒關係,這是真的討厭我現在..

我已經成功地得到這個工作..但我不明白爲什麼..

在Visual Studio中的解決方案的性能。 。在生成選項卡我設置'註冊COM互操作'爲真,並在'應用程序>裝配信息',我設置'使裝配COM-可見'= TRUE ..

我有VS項目文件在共享驅動器。現在,如果我將共享驅動器上的bin文件夾設置爲共享驅動器上的bin文件夾,在我的項目文件下,當我從VBA調用時它不起作用。但是,如果將生成文件夾設置爲本地C驅動器上的文件夾,從VBA呼叫時工作正常..

任何想法?

回答

1

看起來您正在註冊的程序集位於網絡共享上。 .net程序集具有適用於它們的不同安全模型。

您是否試過在本地目錄中安裝程序集和TLB,然後在Tools> References菜單中添加TLB?

此外 - 這可能會完全脫離標記 - 但是有沒有必要將DLL註冊到RegSvr32,以便它是可尋址的?

+0

感謝您的答覆..我試圖安裝和註冊本地(我先註銷原來的位置)..但是當我使用regsvr我碰到下面的ERR這並沒有解決問題.. : 」。 ..dll被加載,但未找到DLLRegisterServer入口點,該文件無法註冊「。 – winshent 2009-02-10 16:27:42

0

事實上,你可以讓它在本地工作,但它在網絡共享失敗,指向.NET安全問題。 .NET處理本地資源的方式與網絡資源不同,與可信互聯網和不可信互聯網不同。我懷疑你的.NET組件被配置爲信任本地程序集,但不信任LocalIntranet程序集。

看到這裏的配置要求讓本地Intranet和這樣的工作:

http://support.microsoft.com/kb/892465

看到這個答案的方法來確定一個組件試圖運行在什麼區:

https://stackoverflow.com/questions/239463?sort=newest

順便說一下,我會說我已經發現配置一個目標網絡共享的環境是相當複雜的,因爲許多假設是由於n使用本地機器上的代碼無效。出於這個原因,我更喜歡在可能的情況下安裝到本地機器,並且只有在有強烈的理由不在本地安裝時才與安全模式作鬥爭。

0

如果您想了解更多關於.net安全的信息,請訪問google for CASPOL.EXE。 CASPOL.EXE是一個隨所有.net框架一起提供的安全工具。 CASPOL代表代碼訪問安全POLicy。藉助此工具,您可以根據區域配置策略。