2010-09-03 54 views
1

我們得到了一個由C#程序員編寫的,編譯成可用作COM對象的DLL。使用C#DLL作爲COM下的Delphi

我們諮詢這些開發人員以獲取函數名稱和語法,我們可以在註冊regasm後使用它。

這是好的,但我們有更多的問題來產生更快的開發(變化),有些東西是不可理解的或不工作的。

我們使用Delphi 6專業版,並使用C#Visual Studio 2008製作的程序集(我認爲)。

讓我們來看看他們:

1) 我不能使用C#代碼的類型庫(TLB),因爲我無法導入到德爾福。

其結果是:

"Hiba az OLE beállításjegyzék használata közben." 

Translate ~ "Error occured on use OLE typelib/setting lib" 

錯誤的可能來源:

一個)的Delphi 6不能導入新的COM DLL-S。

b。)我們必須強制C#生成一個更老的格式化的TLB。

我們試圖用regasm重新生成TLB,但我們也得到了這個錯誤。

這可能是不可能的,但如果情況b。)發生,我們需要對C#開發人員說 - 如何編譯DLL-s? (DLL-s不能由Delphi引入,因爲它們沒有自啓動部分)。

2.) 有趣: 所有參數正確地轉換成變體VICA亦然,但如果C#方法不具有參數,我在Delphi側得到錯誤... 例如(僞):

proc A():bool; 

調用A會在Delphi端產生錯誤。

proc A(Dummy: bool):bool; 

調用A(False)工作正常。

我不知道,爲什麼我們得到了這個。 你對此有何評論?這是一個C#編譯問題?

感謝您的幫助: DD

+1

我很困惑你的問題的一些部分。你說這個C#dll有一個COM接口是可用的,但是你沒有把它導入到delphi 6中。我不熟悉delphi,但我假設你沒有導入它,你甚至不能編譯代碼使用它。你可以嘗試導入dll而不是tlb嗎? – 2011-03-30 23:10:57

回答

1

最佳路線這裏是爲了獲得顯示成功使用的DLL通過COM使用,比如C#源代碼。 DLL的開發人員應該能夠提供。該DLL可能還必須註冊regasm而不是regsvr32.exe,因爲它將用於本機COM DLL),然後才能通過COM訪問該DLL。像往常一樣,沒有更多的實際代碼,回答這樣的問題是非常困難的。

+1

您無法註冊使用regsvr32公開COM的.net dll。你必須使用regasm。 – 2011-03-30 23:04:53

+0

@Cole W:我不知道。我沒有.NET的經驗。我修改了我的答案。 – 2011-03-31 06:22:42