2012-12-21 58 views
1

我想從VB 6調用C#COM對象,並且出現錯誤:453,指出很難找到DLL的入口點。 我將c#中的所有模塊製作爲public,我的COM可見性爲TRUE,並註冊了我的.dll文件,並且我有類型庫文件可用,並且還調用P/Invoke調用。仍然我收到錯誤。我貼我的代碼如下試圖從VB 6調用C#COM對象6

VB6:

Private Declare Function DisplayCForm Lib "C:\Users\LP027077\Documents\Visual Studio 2010\Projects\COMWorld\COMWorld\bin\Debug\COMWorld.dll"() 
Private Sub Command1_Click() 
DisplayCForm 
End Sub 

C#:

namespace COMWorld 
{ 

    [Guid("23047247-38D3-464F-A845-0D42A7ACD622")] 
    [ComVisible(true)] 
    public class COMObject 
    { 
     [DllImport("Kernel32.dll", EntryPoint = "GetConsoleWindow",SetLastError = true)] 
     internal static extern IntPtr GetConsoleWindow(); 
     public void COMModule() 
     { 
      Form f1 = new Form(); 
      f1.Text = "Hello VB6 from c# .NET"; 
     } 
    } 
} 

請幫我在這方面的! 在此先感謝

+0

如果我正確地讀這篇文章,要調用從VB代碼名爲'DisplayCForm'方法,但我沒有看到該方法是在你的DLL中定義...... – PhoenixReborn

+0

你檢查出這個答案嗎? http://stackoverflow.com/questions/1920512/help-call-c-sharp-winforms-dll-from-vb6-project – Christian

+0

我認爲你必須設置你的函數的'別名',但它是一個很長的時間以前,因爲我用VB 6最後 – dotTutorials

回答

6

當我需要從VB 6碼我通常做一個.net COM對象上調用方法如下:

  1. 的標記有ComVisible特性屬性添加到我的.NET類和組裝。
  2. 構建並註冊我的.Net程序集。
  3. 在我的VB項目中添加一個對我的.Net程序集的引用,通過Project |參考菜單。
  4. 在我的VB代碼中使用「New」關鍵字來創建我的.Net類的一個實例,使用它的progid並使用它來調用所需的方法。

您的.Net程序集的progid默認爲程序集名稱加上用句點分隔的類的名稱。一旦你在VB中添加了一個對你的程序集的引用,它應該出現在VB IDE中的Intellisense和Object Browser中。

要使用「COMWorld」的組件名稱和一個名爲「COMObject」級和一個名爲「COMModule」方法使用你的榜樣,我的VB代碼將如下所示:

Private Sub Command1_Click() 

    Dim class1 As New COMWorld.COMObject 
    class1.COMModule 

End Sub 

免責聲明:我擔心我的MacBook Air上沒有VB 6 IDE,因此代碼可能不是100%的編譯器證明!

希望這會有所幫助!

+0

謝謝克里斯!我做了你指定的一切,它幫助我獲得新的東西。現在我得到一個錯誤,該對象不支持此屬性或方法..! @Chris Neave – user1922454

+0

@ user1922454在代碼中刪除Declare語句,並使用Chris添加到項目中的COM對象引用。 – jac

0

您的「聲明函數」用於「經典DLL」,而不是COM。使用COM,只需設置對它的引用,然後在通常的「Dim myObject as theClass」語法中聲明對象。

「很難找到」dll的入口點,因爲dll是一個COM DLL,而您試圖使用頭文件而不是通過iUnknown接口訪問它。